Avatar billede repox Seniormester
08. september 2009 - 10:11 Der er 5 kommentarer og
1 løsning

Dynamiske felter i forbindelse med fleksibel webapplikation

Jeg skal til at lave et produktkatalog, skrevet i PHP.
Kodemæssigt har jeg idéerne, men jeg er lidt rådvild hvad angår et optimalt database setup.

Mit produktkatalog skal helst være dynamisk, forstået på den måde at visse felter naturligvis skal være med (varenummer, navn, pris og lignende). Men jeg kunne godt tænke mig at visse felter kunne oprettes dynamisk.

Jeg har forestillet mig et setup ala dette: (t1)
[code]
+--------+---------+-----------+---------+---------+
| vareId | vNummer | vNavn    | vPris  | vStatus |
+--------+---------+-----------+---------+---------+
|  2345 | VP-1233 | Grydeske  |  124.50 |      1 |
|  5487 | VP-2144 | Rasleskab | 2600.00 |      0 |
+--------+---------+-----------+---------+---------+

[/code]

Håber ovenstående er gennemskueligt?

Så forestiller jeg mig en tabel (t2), tilknyttet vareId der kunne se således ud:
[code]
+--------+------------+------------+
| vareId | feltNavn  | feltVaerdi |
+--------+------------+------------+
|  2345 | color      | Rød        |
|  5487 | dimensions | 150x230    |
|  5487 | weight    | 24kg      |
+--------+------------+------------+
[/code]

Jeg håber også her at ovenstående er til at gennemskue?

Spørgsmålet er så, om ovenstående ville være et optimalt setup?
Ville der være et setup der kunne være bedre (jeg tænker især på hastighed og performance ellers) som måske kunne være fleksibelt? Det kunne jo være relevant hvis produktkataloget skulle indeholde trøjer, hvor et dynamisk feltNavn ville kunne være size og så ville en enkelt feltVaerdi jo ikke være særlig fleksibel.

Jeg efterlyser jeres tanker og idéer om ovenstående eller et bedre setup.
Avatar billede arne_v Ekspert
08. september 2009 - 15:15 #1
Ideen er set foer.

Den er meget fleksibel. Men kan ogsaa give lidt tung kode/queries.

De to alternativer er:

1) et hav af felter i tabellen

ufleksibelt men nemt

2) have et CLOB eller XML felt hvor du gemmer al ekstra information som XML

ogsaa fleksibelt men det brugbare i loesningen afhaenger en del af XML supporten i din database og dit programmerings sprog.

MySQL har *ikke* god support for XML.
Avatar billede repox Seniormester
09. september 2009 - 10:16 #2
#1
Hvis den er korrekt indekseret, vil det naturligvis hjælpe, men jeg har samme idé - at mine queries kan blive voldsomt tunge, hvis datamængden også bliver stor.

Med hensyn til alternativ 1) vil jeg give dig ret i at det er nemt - men så skal jeg bare tilpasse tabellen (samt min kode) for hver gang jeg laver et produktkatalog. Kan det ikke være anderledes, så må det jo være sådan, men det ville være en ubehagelig ting at skulle igennem hver gang.

Angående 2)så ville der i princippet også være et hav af forskellige løsningsmuligheder her. PHP har muligheden for at serialize et array, som jeg så kunne base64 encode og gemme i et felt tilknyttet til vareId. Men så bliver søgemulighederne i produktkataloget (uanset om det er XML eller andet) pludselig også meget mere besværlig - og sandsynligvis også lige så tungt.

Men hvis det er de eneste to alternativer der er, så kunne jeg forestille mig jeg ville benytte mig at den første.
Avatar billede repox Seniormester
10. september 2009 - 23:14 #3
Nå, jeg tror ikke jeg får flere besvarelser.
arne_v, smider du et svar?
Avatar billede arne_v Ekspert
11. september 2009 - 01:12 #4
Ideen i #1 er at vælge et antal attributter og det er så dem som der er at vælge imellem.

Med MySQL kan du lige så godt serialisere om bruge XML, men med andre databaser er der visse muligheder med XML.
Avatar billede arne_v Ekspert
11. september 2009 - 01:12 #5
Og et svar.
Avatar billede repox Seniormester
11. september 2009 - 08:08 #6
Tak for svaret; jeg må erkende at mine opdagelsesevner ikke er kommet længere end til MySQL på trods af der findes mange gode alternativer.

Jeg tror jeg vil gå med forslag #1 :)
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