Jeg tror, udkastet til modellen (følger 6NF
og 3NF) vil hjælpe dig.
Jeg forenklede navnekonventionen ved at fjerne 'shop'-søgeordet.
(Butiksenhed kan også lede et separat koncept AKA SaaS)
SqlFiddle Demo
Om spørgsmålene i kommentarerne:
Ja, det er et almindeligt mønster at bruge surrogat-id
på dine borde. Som du måske kan se i artiklen, vil det komme med sine fordele og ulemper.
For eksempel vil du i spørgsmålet se den primære nøgle til ProductSpecification
tabel er en sammensætning af ProductTypeOptions
, OptionValue
og Product
fremmednøgler.
I mellemtiden primær nøgle for andre tabeller som OptionValue
er en sammensat nøgle (OptionId + ValueName
)
Det ser ud til, at livet bliver nemmere at have et ID
felt i hver tabel som den primære nøgle, ja det er det, men som databasedesigner vil du miste noget værdifuldt, forretningslogik .
I det nuværende design kan du have disse begrænsninger i produktspecifikationstabellen, de vil vise en del af din forretningslogik:
- Tjek begrænsning på
ProductSpecification
{OptionValue.optionId = productTypeOption.optionId}
der forhindrer en værdi som "Hvid" i at blive tildelt "Størrelse". - Tjek begrænsning på
ProductSpecification
{product.productTypeId = productTypeOption.productTypeId}
der forhindrer et produkt som "Nike" i at blive tildelt produktspecifikationer for "Biler".
Hvis du bruger surrogat-id, kan du ikke have denne type begrænsninger inde i din database (prøv dette).
Der vil være behov for ekstra arbejde i din applikationsimplementering for at få dem.
BTW brug surrogat-id, kontroller datakonsistens
, hvis mere interesseret se valg af en primær nøgle:naturlig eller surrogat
.
Det lader til, at "Herresko" fra "Nike" skal have pris, lager og tillæg, så de er naturlig ejendom tilhørende Product
tabel.