Ik zit een beetje te dubben of ik wel de juiste manier gebruik voor de prijzen van producten in een database. Er zitten de volgende tabellen in de database:
Tabel 'item' (item_id, item_naam, item_prijs)
Tabel 'itemoptie' (itemoptie_id, itemoptie_prijs, maat_idfk, item_idfk)
Tabel 'maat' (maat_id, maat_naam)
Je kan dus producten hebben met een id, naam en een prijs. Je kan bijvoorbeeld product A van 20 euro invullen. Lekker makkelijk, je vult alleen tabel item in en klaar is kees. Het resultaat is:
A 20 euro
Maar producten kunnen ook extra opties hebben, zoals maten, met bijbehorende prijs. Zo kan er van product A een Large versie zijn van 22 euro en een XXL product A van 24 euro.
Zoals ik het nu heb gemaakt in mijn systeem wordt de normale item_prijs genegeerd en dus niet getoond indien er optieprijzen bestaan van het betreffende product. Dat heb ik gedaan omdat het 'basis' A product eigenlijk geen zin heeft om te tonen als er ook opties zijn, anders krijg je zoiets:
A 20 euro (deze tonen we dus maar niet, want zonder specificatie slaat het eigenlijk nergens op)
A Large 22 euro
A XLarge 24 euro
Een nadeel hiervan is dat als er opties zijn met bijbehorende prijzen, dat je dan eigenlijk al weet dat je voor nop de basisprijs aan het invullen bent. Wat wel handig is, dat als je op de basisprijs gewoon dezelfde prijs invult als de goedkoopste optie, dat je dan een makkelijke query hebt om in het overzicht van producten meteen de juiste prijs te tonen, je toont dan gewoon de prijs die bij basisprijs is ingevuld omdat die toch gelijk is aan de eerste optieprijs.
Wat ook nog zou kunnen is in de tabel 'item' de prijs weglaten. Dan moet je hem altijd moet invullen in de tabel 'itemoptie'. Misschien een beetje omslachtig als je veel producten hebt die toch helemaal geen opties en dus maar 1 prijs hebben.
Als ik naar OpenCart kijk, dan zie ik dat die een 'basisprijs' heeft in de producttabel. Maar die wordt niet genegeerd als er opties zijn van het product, die blijft altijd zichtbaar. Dan krijg je zoiets als:
A 20 euro
A Large +2 euro
A XLarge +4 euro
Maar dat vind ik raar, want wat voor een maat is de basis A dan van 20 euro? Dat ziet er niet echt handig uit dus dit vind ik een mindere manier.
Dus, wat is wijsheid? Moet ik het maar zo laten zoals ik het nu heb gemaakt, of zijn er nog betere ideeen?
Tabel 'item' (item_id, item_naam, item_prijs)
Tabel 'itemoptie' (itemoptie_id, itemoptie_prijs, maat_idfk, item_idfk)
Tabel 'maat' (maat_id, maat_naam)
Je kan dus producten hebben met een id, naam en een prijs. Je kan bijvoorbeeld product A van 20 euro invullen. Lekker makkelijk, je vult alleen tabel item in en klaar is kees. Het resultaat is:
A 20 euro
Maar producten kunnen ook extra opties hebben, zoals maten, met bijbehorende prijs. Zo kan er van product A een Large versie zijn van 22 euro en een XXL product A van 24 euro.
Zoals ik het nu heb gemaakt in mijn systeem wordt de normale item_prijs genegeerd en dus niet getoond indien er optieprijzen bestaan van het betreffende product. Dat heb ik gedaan omdat het 'basis' A product eigenlijk geen zin heeft om te tonen als er ook opties zijn, anders krijg je zoiets:
A 20 euro (deze tonen we dus maar niet, want zonder specificatie slaat het eigenlijk nergens op)
A Large 22 euro
A XLarge 24 euro
Een nadeel hiervan is dat als er opties zijn met bijbehorende prijzen, dat je dan eigenlijk al weet dat je voor nop de basisprijs aan het invullen bent. Wat wel handig is, dat als je op de basisprijs gewoon dezelfde prijs invult als de goedkoopste optie, dat je dan een makkelijke query hebt om in het overzicht van producten meteen de juiste prijs te tonen, je toont dan gewoon de prijs die bij basisprijs is ingevuld omdat die toch gelijk is aan de eerste optieprijs.
Wat ook nog zou kunnen is in de tabel 'item' de prijs weglaten. Dan moet je hem altijd moet invullen in de tabel 'itemoptie'. Misschien een beetje omslachtig als je veel producten hebt die toch helemaal geen opties en dus maar 1 prijs hebben.
Als ik naar OpenCart kijk, dan zie ik dat die een 'basisprijs' heeft in de producttabel. Maar die wordt niet genegeerd als er opties zijn van het product, die blijft altijd zichtbaar. Dan krijg je zoiets als:
A 20 euro
A Large +2 euro
A XLarge +4 euro
Maar dat vind ik raar, want wat voor een maat is de basis A dan van 20 euro? Dat ziet er niet echt handig uit dus dit vind ik een mindere manier.
Dus, wat is wijsheid? Moet ik het maar zo laten zoals ik het nu heb gemaakt, of zijn er nog betere ideeen?