Avatar billede cytox Nybegynder
31. august 2010 - 21:53 Der er 6 kommentarer

Design: Variabelt antal kolonner

Hej eksperter,

Jeg er ved at designe en database til et varekatalog
Og den skal have mulighed for at gemme et variabelt antal kolonner om produktet afhængig af hvilken kategori produktet er i, samtidig med at man kan sortere på indholdet (enten via PHP eller SQL, bare så længe det ikke er uacceptabelt langsomt).

Produkt kategorierne skal være dynamisk oprettede.

Simpelt eksempel:

Kategori: Harddiske:
Producent,
Model,
ModelNummer,
Tommer,
RPM,
GB


Kategori: Processorer:
Producent,
GHZ,
Cache,
Socket


Som det tydeligt fremgår så har de to kategorier ikke det samme antal kolonner hvilket har gjort det til noget af en hovedpine at finde ud af hvordan de forskellige varegrupper skal gemmes.

Mine forslag:
1:
En enkelt tabel 'Produkter' som har fx 12 kolonner dedikeret til produktdata hvor man holder styr på hvilke af de 12 der er i brug og hvad de hedder i en anden tabel.

2:
Quick&Dirty dynamisk oprettelse og sletning af tabeller i databasen

3:
En tabel med en enkelt kolonne til data, som indenholder en fx NUL delimited liste med alle data (ProducentNULGHZNULCacheNULSocket)


De skriger alle sammen...
...Manglende normalisering...
...Ineffektivitet...
...Ikke sortérbart


Er der nogen som har nogle knald gode forslag der kunne hjælpe mig på vejen eller nogen der måske ligger inde med en løsning ?
Eller endvidere nogen som kan fortælle at det bare ikke kan laves effektivt ?

Hvis det er nogen hjælp så vil jeg informere om at databasen bliver lavet til MySQL, og koden bliver skrevet i PHP.


Mvh.
Avatar billede Slettet bruger
01. september 2010 - 00:04 #1
De to varegrupper har ikke meget til fælles...
- Hvorfor vil du ("pine-død") have dem i samme tabel ?
Avatar billede arne_v Ekspert
01. september 2010 - 00:39 #2
Jeg vil mene at de to mest brugte løsninger er:

vare
----
id,INTEGER,PK
navn,VARCHAR
kategori,INTEGER
...

varebeskrivelse
---------------
id,INTEGER,PK
vareid,INTEGER,FK->vare
egenskab_navn,VARCHAR
egenskab_vaerdi,VARCHAR

og:

vare
----
id,INTEGER,PK
navn,VARCHAR
kategori,INTEGER
...
egenskaber,XML eller VARCHAR(stor) med XML med egenskaber
Avatar billede teepee Nybegynder
01. september 2010 - 12:51 #3
Arne's løsning er "pænest" hvis du spørger arkitekten, men jeg ved fra flere udbydere af spørgeskemaundersøgelser, at det er et helvede at udtrække resultaterne når først der er 20K besvarelser. hvis du har rigtigt mange produkt-typer og de alle er temmelig forskellige, så kunne du f.eks. lave en template som fortæller hvilke kolonner (og om de er krævede) og med hvilke labels du skal skrive/læse i i en mastertabel som kan bruges til lidt af hvert. Så kan du oprette lidt tekst-, number- og dato-felter som du bare kalder felt1, felt2 osv (alle ikke-krævede). Sørg for at få en kategori-kolonne med i tabellen (krævet). For lettere læsning kan du så lave et Harddisk-view, et Processor-view osv. som kan genereres dynamisk ud fra templaten for produkttypen.
Avatar billede cytox Nybegynder
01. september 2010 - 19:05 #4
#1
Fordi ham jeg koder for vil have mulighed for at oprette/redigere/slette produkt kategorier til alle mulige typer af produkter helt dynamisk og uden at jeg skal blandes ind i det.

Det i sig selv er ret lige til, men når først han også vil ha mulighed for at søge og sortere på alle kolonner i alle kategorier så er det ikke så lige til, og som skrevet så syntes jeg det skriger af 'forkert' at lave/redigere/fjerne tabeller live i databasen.

#2 og #3; Mange tak for de foreløbige svar, jeg vil lige teste alt det her i praksis før jeg beslutter mig for hvad det bliver til jeg skal nok vende tilbage til jer når jeg er kommet frem til en løsning.

Mvh.
Avatar billede arne_v Ekspert
20. november 2010 - 01:36 #5
Kommet videre?
Avatar billede cytox Nybegynder
20. november 2010 - 11:27 #6
Hej,

Nej det er jeg desværre ikke,

Pga. private forhold er jeg blevet nødt til at sætte det hele på stand-by.

Men jeg har på ingen måde glemt jer :)

Mvh.
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