Ik wil een catalogus gaan programmeren, maar was niet van plan een platte structuur te maken waarbij ieder product een naam en beschrijving heeft, maar meer zoiets als de pricewatch van tweakers. Categorieën met ieder hun eigen specificatie per product afgestemd op de categorie. Ieder product heeft dus een aantal specificatie velden die afhankelijk zijn van de categorie waarin het geplaatst is.
Ik ben de database aan het ontwerpen en had dit ongeveer zo gedacht:
Producten:
Product_ID
Categorie_ID
Product_Naam
Categorieën:
Categorie_ID
Categorie_Naam
Categorie_Specs:
Spec_ID
Categorie_ID
Spec_Naam
Spec_List:
Spec_ID
Product_ID
Spec_Waarde
Buiten dat ik natuurlijk nog wat meer informatie op wil slaan en dat ik numerieke en text data niet in eenzelfde datatype kwijt kan i.v.m. met sortering, zou ik hier alle kerngegevens in genormaliseerde vorm in kwijt moeten kunnen.
Nu wil ik per categorie natuurlijk een lijst kunnen maken van producten, bijbehorende specificaties en daarop ook kunnen sorteren en selecteren. Daarvoor moet ik dan wel alle specificaties in één query aan de Producten tabel kunnen joinen. Ik zie echter niet hoe ik dit vorm zou moeten geven. Een tabel meerdere keren op twee velden aan de Producten joinen? (MySQL 5.0)
Een andere optie zou zijn om niet te normaliseren, de producten tabel een aantal extra velden te geven en in een derde tabel de betekenis voor die velden per categorie op te slaan. Dit idee roept bij mij in eerste instantie walging op vanwege niet genormaliseerde data, maar begin ik nu steeds meer als een reële optie te zien. Niet zozeer vanuit de onmogelijkheid van bovenstaande optie, want ik geloof wel dat dat te implementeren is, desnoods in code, maar wel omdat dit misschien veel efficiënter is met CPU cycles en mogelijk ook zelfs schijfruimte (afhankelijk van implementatie en gebruik). Ik wil dit systeem juist omdat het flexibel en schaalbaar is in product spectra, maar het moet natuurlijk ook schaalbaar zijn qua prestaties.
Mijn vragen:
1). Hoe join bij de voorgestelde database structuur om de gevraagde gegevens te selecteren?
2). Kan ik beter, alles in beschouwing nemend, voor een andere database structuur kiezen?
Ik ben de database aan het ontwerpen en had dit ongeveer zo gedacht:
Producten:
Product_ID
Categorie_ID
Product_Naam
Categorieën:
Categorie_ID
Categorie_Naam
Categorie_Specs:
Spec_ID
Categorie_ID
Spec_Naam
Spec_List:
Spec_ID
Product_ID
Spec_Waarde
Buiten dat ik natuurlijk nog wat meer informatie op wil slaan en dat ik numerieke en text data niet in eenzelfde datatype kwijt kan i.v.m. met sortering, zou ik hier alle kerngegevens in genormaliseerde vorm in kwijt moeten kunnen.
Nu wil ik per categorie natuurlijk een lijst kunnen maken van producten, bijbehorende specificaties en daarop ook kunnen sorteren en selecteren. Daarvoor moet ik dan wel alle specificaties in één query aan de Producten tabel kunnen joinen. Ik zie echter niet hoe ik dit vorm zou moeten geven. Een tabel meerdere keren op twee velden aan de Producten joinen? (MySQL 5.0)
Een andere optie zou zijn om niet te normaliseren, de producten tabel een aantal extra velden te geven en in een derde tabel de betekenis voor die velden per categorie op te slaan. Dit idee roept bij mij in eerste instantie walging op vanwege niet genormaliseerde data, maar begin ik nu steeds meer als een reële optie te zien. Niet zozeer vanuit de onmogelijkheid van bovenstaande optie, want ik geloof wel dat dat te implementeren is, desnoods in code, maar wel omdat dit misschien veel efficiënter is met CPU cycles en mogelijk ook zelfs schijfruimte (afhankelijk van implementatie en gebruik). Ik wil dit systeem juist omdat het flexibel en schaalbaar is in product spectra, maar het moet natuurlijk ook schaalbaar zijn qua prestaties.
Mijn vragen:
1). Hoe join bij de voorgestelde database structuur om de gevraagde gegevens te selecteren?
2). Kan ik beter, alles in beschouwing nemend, voor een andere database structuur kiezen?