sql >> Database teknologi >  >> RDS >> PostgreSQL

postgresql database design til e-handel

Bare at se på sko, har du én enhed:sko. Den har to direkte egenskaber:størrelse og farve. Domænet for hver af disse attributter skal være strengt defineret, hvilket angiver opslagstabeller for dem. Der er to indirekte attributter, pris og mængde, men disse er attributter mere for hver kombination af størrelse/farve end for en sko selv.

Dette foreslår én enhedstabel:Sko; to opslagstabeller:Størrelser og farver; og en tre-vejs skæringstabel:ShoeStyles:

create table ShoeStyles(
    ShoeID   int       not null,
    SizeID   smallint  not null,
    ColorID  char( 1 ) not null,
    Price    currency,
    Qty      int       not null default 0,
    constraint FK_ShoeStyles_Shoe foreign key references Shoes( ID ),
    constraint FK_ShoeStyles_Size foreign key references Sizes( ID ),
    constraint FK_ShoeStyles_Color foreign key references Colors( ID ),
    constraint PK_ShoeStyles primary key( ShoeID, SizeID, ColorID )
);

Således vil f.eks. kombinationen ('Penny Loafer', '10 1/2', 'Tan') have en bestemt pris og mængde på hånden. Størrelsen 11 Tan vil have sin egen pris og mængde, ligesom 10 1/2 Burgandy.

Jeg vil anbefale en visning, der slutter sig til tabellerne og præsenterer resultaterne i en mere brugbar form som vist ovenfor i stedet for f.eks. (15, 4, 3, 45.00, 175). Triggere på visningen kunne tillade al adgang for applikationen gennem visningen, så appen forbliver agnostisk over for det fysiske layout af dataene. Sådanne visninger er et ekstremt kraftfuldt værktøj, som bidrager væsentligt til robustheden og vedligeholdelsen af ​​de underliggende data og af selve appen, men som er sørgeligt underudnyttet.



  1. psycopg2 indsætter faktisk ikke data

  2. SQL INSERT fra SELECT

  3. Oracle SQL -- fjern delvis duplikat fra streng

  4. funktion eksisterer ikke, men jeg tror virkelig den gør