sql >> Databasteknik >  >> RDS >> Mysql

Lagerhantering med aktieoptioner

Jag tror att utkastet till modellen (följer 6NF och 3NF) kommer att hjälpa dig.
Jag förenklade namnkonventionen genom att ta bort nyckelordet 'butik'.
(Också butiksenheten kan leda ett separat koncept AKA SaaS)

SqlFiddle Demo

Om frågorna i kommentarerna:

Ja, det är ett vanligt mönster att använda surrogatidentifierare på dina bord. Som du kanske ser i artikeln kommer det att ha sina för- och nackdelar.

Till exempel, i frågan kommer du att se den primära nyckeln för ProductSpecification tabellen är en sammansättning av ProductTypeOptions , OptionValue och Product främmande nycklar.
Under tiden primärnyckeln för andra tabeller som OptionValue är en sammansatt nyckel (OptionId + ValueName )
Det ser ut som att livet kommer att bli lättare att ha ett ID fält i varje tabell som primärnyckel, ja det är det, men som databasdesigner kommer du att förlora något värdefullt, affärslogik .

I den nuvarande designen kan du ha dessa begränsningar i produktspecifikationstabellen, de kommer att visa en del av din affärslogik:

  • Kontrollera begränsningen på ProductSpecification {OptionValue.optionId = productTypeOption.optionId} som förhindrar att ett värde som "Vit" tilldelas "Storlek".
  • Kontrollera begränsningen på ProductSpecification {product.productTypeId = productTypeOption.productTypeId} som förhindrar att en produkt som "Nike" tilldelas produktspecifikationer för "Bilar".

Om du använder surrogatidentifierare kan du inte ha den här typen av begränsningar i din databas (prova detta).
Extra arbete kommer att behöva göras i din applikationsimplementering för att få dem.
BTW använd surrogatidentifierare, kontrollera datakonsistens , om mer intresserade se välja en primärnyckel:naturlig eller surrogat .

Det verkar som om "Herrsko" från "Nike" måste ha pris, lager och tilläggsavgift, så de är naturliga egendomar för Product bord.



  1. Varning:#1265 Data trunkerad för kolumn 'pdd' på rad 1

  2. Hur man upprätthåller char(N)-datatypen istället för varchar(N) i django-modellfältet

  3. Azure SQL Database Administration Tips and Hints Exam (DP-300)

  4. PHP MySQL set Connection Timeout