06. marts 2006 - 15:40Der er
7 kommentarer og 1 løsning
Database design overvejelser
Hej
Jeg skal til at designe en større database, som skal indeholde en masse varer, inddelt i forskellige varegrupper. Hver varegruppe har hver sit sæt af specifikationer, som skal gemmes i databasen. Databasen, eller varekataloget, om I vil, skal danne grundlag for en webshop.
Jeg er lidt i tvivl om, hvordan jeg skal gribe dette an, rent design-mæssigt. Jeg er umiddelbart kommet frem til to forskellige modeller:
1) Én tabel indeholder en liste over alle varer, deres varenummer, pris og andre data som er fælles på tværs af varegrupperne. Derudover eksisterer én tabel for hver varegruppe, som kan indeholde de data der er specifikke for varegrupperne hver især.
Eksempelvis:
TabelVarer (fælles for alle varer) ----- * vare_id (PK) * varenr * fritekst * pris
2) Én tabel indeholder en liste over alle varer, deres fælles data, samt en eller anden form for 'dynamisk felt'-løsning, hvor specifikationer ud over varenummer, pris m.m. gemmes i et tekst-felt fx i formatet:
antaldøre=4;vægt=1500;mærke=citroen;
Der er ups & downs ved begge modeller, dog hælder jeg klart mest til model 1, da den er langt mere struktureret og med færre risiko for fejl i forhold til model 2. Desuden er det langt nemmere/hurtigere at foretage søgninger på data i model 1 (hvilket er en vigtig del af webshoppen). Et minus ved model 1 er dog, at hvis man senere hen ønsker at tilføje en ny varegruppe til webshoppen, skal man oprette en helt ny tabel, hvilket man kommer udenom i model 2.
Men jeg vil gerne høre jeres mening.
Jeg er desuden meget interesseret i at høre, hvad I har af erfaringer med denne type databaser; hvilke andre strukturer kan benyttes, kan I sige god for en bestemt struktur og er der andre overvejelser jeg skal gøre mig, inden jeg tager fat på dette projekt?
Point fordeles blandt dem, som bidrager med noget brugbar input.
Bullet 1) Når du siger samme PK i alle tabeller, mener du så at vare_id i TabelBiler i mit eksempel bør være både PK og FK (og bil_id derved bør fjernes helt)?
Bullet 2) Mht. at have én tabel med både fælles og kategori-specifikke data, så skaber det vel nogle problemer, hvis man skal implementere noget funktionalitet, som kombinerer flere varer på tværs af varegrupper i fx tilbud el. lign. ("køb denne vare sammen med denne og få rabat"), gør det ikke?
Bullet 3) Ja, det var også en mulighed, men mener du hermed, at det samlede antal felter i denne ene tabel vil være det samme som antallet af felter i alle tabeller tilsammen i bullet 1?
Jo, hvis du har en tabel, som samler det hele ('hovedtabellen' i bullet 1), er det vel nemmere at lave relationer på tværs af varegrupper, end hvis alle varegrupper ligger fuldstændig adskilt fra hinanden. Men det kan godt være jeg overser noget.
3)
Ok. Hvad er der af fordele ved dette design, andet end at man ikke behøver at lave opslag i flere tabeller (set i modsætning til bullet 1, hvor man både skal slå op i en 'hovedtabel' og en varegruppe-tabel)?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.