Saeverix schreef op maandag 09 augustus 2010 @ 21:47:
[...]
Hoe bedoel je dat precies? Op dit moment kun je alleen kiezen welke kleur je wilt hebben. Dit gebeurt middels een dropdown box naast het te bestellen product. Dit zijn vooraf bekende kleuren. Via de admin kun je per product aangeven welke kleuren beschikbaar zijn.
Vervolgens zit er in de "products" tabel een kolom met daarin een string met bijvoorbeeld "1,2,4,6". Dat zijn de ID's van de kleuren uit de "colors" tabel.
Bij het weergeven van de producten die ik 1 query op de "colors" tabel en plaats die in een Array. Vervolgens explode in de "colors" string uit de "products" tabel en ga ik met een loop door de "colors" array om de dropdown box aan te maken.
Dat was de meest logische oplossing die ik kon bedenken. Misschien dat een ander brein met een andere gedachte een veel logischere en makkelijkere oplossing heeft. Dus ik zou graag weten wat jij in gedachte hebt.
Hierzo zit een ander brein in
Ik werk ook best veel met databases en vaak is een koppeltabel een handigere oplossing. Ook dat is prima met één query eruit te halen, om de kleuren weer te geven. Je krijgt dan 1 extra tabel, maar dat is ook geen probleem voor een database. Voordeel van een systeem op een dergelijke (genormaliseerde) manier op te bouwen is dat je in de toekomst ook minder gauw met beperkingen van een eerder (puur voor die situatie) bedachte geschikte manier. De tabellen voor de producten heb je al, een tabel met de kleuren ook begrijp ik?
Je hebt dan een koppeltabel nodig: product_colors waarin je een kolom hebt voor product_id en een kolom voor color_id. In principe kan je het geheel van de kolommen dan als primary key gebruiken, omdat een bepaald product niet 2 keer een bepaalde kleur zal hebben als mogelijke eigenschap.
Voor een eventuele uitbreiding kan je aan zoiets dergelijks denken (er zijn meerdere opties mogelijk):
Tabellen: Property_names, Values, product_propertys
In property_names sla je de naam op van verschillende eigenschappen die een product kan hebben, bijvoorbeeld: kleur, maat of gewicht.
In Values geef je alle waarden in van alle property_names. Bijv "Rood", 46, "80 gram" (met de eenheden kan je ook weer verschillende mogelijkheden bedenken), maar je koppelt hier ook meteen de mogelijke waarden aan een eigenschap (property_name) in dezelfde tabel.
Vervolgens heb je al een lijst waarin je voor bepaalde producteigenschappen de mogelijke waarden hebt staan.
Enige wat dan nog overblijft is het koppelen van deze eigenschappen aan producten wat je in eenzelfde soort tabel doet als wat ik al eerder aangaf. Product-id, value_id
Je kan zo ook nog verder denken en de eigenschappen niet meteen aan het product koppelen, maar de producten categoriseren, en op die manier per productcategorie aangeven welke property_names daarbij mogelijk zijn. => Dit is dan weer eenvoudig voor de administratie. (je gaat bij een dvd niet de optie "kleur" tonen bijvoorbeeld, als je de eigenschappen wil vullen)
Een mooie regel is:
Laat je in de toekomst niet beperken door een snelle oplossing die je voor een bepaald probleem heb bedacht. Denk aan mogelijke uitbreidingen in de toekomst en probeer (redelijk, niet té!) generiek te werken. Daar heb je later alleen maar voordeel van.
[
Voor 4% gewijzigd door
jbdeiman op 09-08-2010 22:44
]