Avatar billede bernhof Nybegynder
06. marts 2006 - 15:40 Der 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

TabelBiler (specifikt for biler)
-----
* bil_id (PK)
* vare_id (FK)
* mærke
* antaldøre
* vægt


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.


På forhånd tak for jeres opmærksomhed.

Med venlig hilsen

Mikkel
Avatar billede arne_v Ekspert
06. marts 2006 - 16:11 #1
jeg kan heller ikke lide #2 men den er set i virkeligheden

de 3 klassiske er:

* 1 tabel med faelles data + 1 tabel for hver kategori med kategori specifikke data

det du skitserer er den foerste bullet (bortset fra at jeg ville have samme PK
i alle tabeller)

man kan argumentere baade for og imod hver af bulletsene, men jeg synes at du skal
overveje den anden bullet - ofte er den nemmest at kode


* 1 tabel for hver kategori som indeholder baade faelles data og kategori specifikke data

* 1 tabel som indeholder baade faelles data og kategori specifikke data for alle kategorier (med en masse NULL's)
Avatar billede arne_v Ekspert
06. marts 2006 - 16:11 #2
ups - der fik jeg vist rodet lidt rundt i teksten - de to saetninger skal komme
efter de 3 bullets for at det giver mening
Avatar billede bernhof Nybegynder
06. marts 2006 - 22:13 #3
Hej arne_v. Tak for 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?
Avatar billede arne_v Ekspert
06. marts 2006 - 22:29 #4
re 1)

ja

re 2)

vel ikke flere end med de andre strukturer ?

re 3)

minus overlap - ja

ikke koent, men det er absolut en mulighed
Avatar billede bernhof Nybegynder
07. marts 2006 - 10:29 #5
2)

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)?
Avatar billede arne_v Ekspert
07. marts 2006 - 14:51 #6
re 2)

det er ihvertfald ikke indlysende for mig

re 3)

det er simpelt - ingen joins, ingen unions

jeg vil ikke anbefale den model, men det er en af dem man skal overveje

ulemperne er naturligvis stoerst hvis der er mange kategori specifikke felter
Avatar billede bernhof Nybegynder
07. marts 2006 - 15:56 #7
Ok, igen, tak for dit input arne_v. Jeg tror det bliver til model nr. 1.

Vil du lægge et svar, så du kan få point :-)
Avatar billede arne_v Ekspert
07. marts 2006 - 16:56 #8
kommer her
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester