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

MySQL-database til at gemme produkt, farve, størrelse og lager

Her er dit bord.

Shirt

  id    product       color    size   stock
---------------------------------------------
   1    Nike Shirt    black     M       5
   2    Nike Shirt    white     L       10
   3    Nike Shirt    blue      M       2
   4    Nike Shirt    blue      XL      3
  ....

Du kan se, hvordan du har duplikeret produktnavnet "Nike Shirt" og farven "blå". I en normaliseret relationsdatabase ønsker vi ikke at duplikere nogen information. Hvad tror du, der ville ske, hvis nogen ved et uheld ændrede "Nike-skjorte" til "Nike-nederdel" i række 4?

Så lad os normalisere dit bord.

Vi starter med en produkttabel.

Product

  id    product    
------ ------------
   0    Nike Shirt

Generelt starter database-id-numre med nul, ikke én.

Lad os derefter oprette en farvetabel.

Color

  id    color   
------  -------
   0    black    
   1    white    
   2    blue 

Lad os derefter oprette en størrelsestabel.

Size

  id   size 
------ -----
   0    XS
   1    S
   2    M
   3    L
   4    XL
   5    XXL 

Ok, nu har vi 3 separate objekttabeller. Hvordan sætter vi dem sammen, så vi kan se, hvad der er på lager?

Du havde den rigtige idé med dit originale bord.

Stock

  id    product       color    size   stock
---------------------------------------------
   0        0           0        2       5
   1        0           1        3      10
   2        0           2        2       2
   3        0           2        4       3

Produkt-, farve- og størrelsesnumrene er fremmednøgler tilbage til produkt-, farve- og størrelsestabellerne. Grunden til, at vi gør dette, er for at eliminere duplikering af oplysningerne. Du kan se, at enhver information er gemt ét sted og kun ét sted.

Id'et er ikke nødvendigt på aktietabellen. Produktet, farven og størrelsen skal være unikke, så disse 3 felter kan danne en sammensat nøgle til lagertabellen.

I en egentlig detailbutik kan et produkt have mange forskellige egenskaber. Attributterne vil sandsynligvis blive gemt i en nøgle/værdi-tabel . Til din simple tabel kan vi dele tabellen op i normaliserede relationelle tabeller.



  1. SQLSTATE[42S22]:Kolonne blev ikke fundet:1054 Ukendt kolonne 'id' i 'where clause' (SQL:vælg * fra 'songs' hvor 'id' =5 limit 1)

  2. Tilføjelse af en underforespørgsel til en allerede gigantisk forespørgsel

  3. Hvordan skriver man største n pr. gruppe forespørgsel, men med yderligere betingelser?

  4. C# MySQL-parametre:? eller @