Mysql
 sql >> Database >  >> RDS >> Mysql

Gestione dell'inventario con stock option

Penso che la bozza del modello (segue 6NF e 3NF) ti aiuteranno.
Ho semplificato la convenzione di denominazione rimuovendo la parola chiave "negozio".
(Anche l'entità negozio può guidare un concetto separato AKA SaaS)

SqlFiddle Demo

Informazioni sulle domande nei commenti:

Sì, è un modello comune utilizzare identificatore surrogato sulle tue tavole Come puoi vedere nell'articolo, questo avrà i suoi pro e contro.

Ad esempio, nella domanda, vedrai la chiave primaria di ProductSpecification table è una composizione di ProductTypeOptions , OptionValue e Product chiavi esterne.
Nel frattempo chiave primaria di altre tabelle come OptionValue è una chiave composta (OptionId + ValueName )
Sembra che la vita sarà più facile avere un ID campo in ogni tabella come chiave primaria, sì, ma come progettista di database perderai qualcosa di prezioso, logica aziendale .

Nel design attuale puoi avere questi vincoli nella tabella Product-Specification, mostreranno parte della tua logica aziendale:

  • Controlla il vincolo su ProductSpecification {OptionValue.optionId = productTypeOption.optionId} ciò impedirà che un valore come "Bianco" venga assegnato a "Taglia".
  • Controlla il vincolo su ProductSpecification {product.productTypeId = productTypeOption.productTypeId} ciò impedirà che un prodotto come "Nike" venga assegnato alle specifiche del prodotto di "Auto".

Se usi l'identificatore surrogato non puoi avere questo tipo di vincoli all'interno del tuo database (prova questo).
Sarà necessario del lavoro extra all'interno dell'implementazione dell'applicazione per ottenerli.
BTW usa un identificatore surrogato, verifica la coerenza dei dati , se sei più interessato vedi scegliere una chiave primaria:naturale o surrogata .

Sembra che la "Scarpa da uomo" di "Nike" debba avere prezzo, stock e sovrapprezzo, quindi sono proprietà naturali di Product tabella.