Oprettet tir. d. 31. august 2010 kl. 21:53:17

cytox
cytox (5.365 point. Point ude: 210)

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.

Skrevet ons. d. 01. september 2010 kl. 00:04:12| #1

De to varegrupper har ikke meget til fælles...
- Hvorfor vil du ("pine-død") have dem i samme tabel ?

Skrevet ons. d. 01. september 2010 kl. 00:39:18| #2

arne_v
arne_v (1.005.403 point)
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

Skrevet ons. d. 01. september 2010 kl. 12:51:51| #3

teepee
teepee (33.766 point)
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.

Skrevet ons. d. 01. september 2010 kl. 19:05:01| #4

cytox
cytox (5.365 point)
#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.

Skrevet lør. d. 20. november 2010 kl. 01:36:34| #5

arne_v
arne_v (1.005.403 point)
Kommet videre?

Skrevet lør. d. 20. november 2010 kl. 11:27:27| #6

cytox
cytox (5.365 point)
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.

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Redning af data på harddisk.

Oprettet den 7. februar 2012 kl. 21.02
brieost giver 15 point for svar | Giv et svar »

win uppdate

Oprettet den 26. januar 2012 kl. 14.36
oppes giver 100 point for svar | Giv et svar »

Database til styring af opgave.

Oprettet den 9. januar 2012 kl. 12.06
Knox82 giver 200 point for svar | Giv et svar »

Seneste guides

Installer win 7
Den gode bruger


   




Tips & Tricks fra PC World

Teaser billede

Gør dig selv en tjeneste: Køb et ordentligt SD-kort

Der kan være meget stor hastighedsforskel på to umiddelbare ens SD-kort. Se her hvad du skal være opmærksom på, når du køber ekstra hukommelse til din mobil, tablet eller kamera.


Anmeldelser fra PC World

Teaser billede

Test: Denne super-tablet er iPads hårdeste konkurrent

Eee Pad Transformer Prime er frygtindgydende med sin quadcore processor og evne til at trylle sig om til bærbar. Apple bør kigge i bagspejlet, for Asus' tablet-pc kommer buldrende - og gør det...


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Gratis flysimulator fra Microsoft

Den legendariske Flight Simulator fra Microsoft genopstår den 29. februar - og denne gang er spillet gratis.


Nyheder fra Computerworld

Teaser billede

Bank: Derfor er login uden NemID helt i orden

Der er ikke hold i påstanden om sikkerhedsproblemer i forbindelse med bankkunders login uden brug af NemID, lyder det fra Nykredit Bank.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger