Stel je hebt een database waar producten in staan.
Er is een product-tabel. Daar staan oa. artikelnummer en naam in, maar ook een id als primary key.
Het is vrij simpel om daar queries op uit te voeren.
Naast de product-tabel zijn er hulptabellen. Die hulptabellen hebben een verschillende opbouw.
Voorbeeld van een aantal tabellen:
- 'eigenschappen' met de velden product_id, eigenschapcode en waarde.
- 'prijs' met de velden product_id, datum en prijs (het record met de meest recente datum die niet in de toekomst ligt bevat de huidige prijs).
- 'voorraad' met de velden product_id, datum en voorraad (het record met de meest recente datum bevat de huidige voorraad)
Het is gemakkelijk om van een product een overzicht met eigenschappen weer te geven. Wil ik een prijs weten, dan kan ik die met een vrij simpele query uit de prijs-tabel halen.
Het wordt echter lastig als ik een lijst producten wil weergeven op grond van verschillende kenmerken en sortering.
Bijvoorbeeld sortering op prijs. Ik moet dan een subquery maken die de prijs ophaalt. Met een join kan dit niet, want ik moet alleen de meest recente prijs hebben. Tenzij ik die join combineer met een subquery die de datum van de meest recente prijs (die niet in de toekomst ligt) ophaalt.
Zoek-queries worden hierdoor complex. Er zijn nog veel meer verschillende tabellen, hierboven noemde ik enkele voorbeelden. Er moeten veel zoek-mogelijkheden zijn.
Hoe los ik het probleem op van de (te) complexe queries om een lijst producten weer te geven op basis van bepaalde criteria en een bepaalde sortering?
Mijn oplossing: Een index-tabel maken met voor elk beschikbare product een record met daarin de huidige prijs, huidige voorraad, bepaalde eigenschappen waar op gezocht kan worden, etc.. De lijst- en zoekfunctie werkt met die index-tabel. Index-tabel wordt periodiek opnieuw opgebouwd, mbv. een cronjob.
Zijn er betere oplossingen denkbaar?
Er is een product-tabel. Daar staan oa. artikelnummer en naam in, maar ook een id als primary key.
Het is vrij simpel om daar queries op uit te voeren.
Naast de product-tabel zijn er hulptabellen. Die hulptabellen hebben een verschillende opbouw.
Voorbeeld van een aantal tabellen:
- 'eigenschappen' met de velden product_id, eigenschapcode en waarde.
- 'prijs' met de velden product_id, datum en prijs (het record met de meest recente datum die niet in de toekomst ligt bevat de huidige prijs).
- 'voorraad' met de velden product_id, datum en voorraad (het record met de meest recente datum bevat de huidige voorraad)
Het is gemakkelijk om van een product een overzicht met eigenschappen weer te geven. Wil ik een prijs weten, dan kan ik die met een vrij simpele query uit de prijs-tabel halen.
Het wordt echter lastig als ik een lijst producten wil weergeven op grond van verschillende kenmerken en sortering.
Bijvoorbeeld sortering op prijs. Ik moet dan een subquery maken die de prijs ophaalt. Met een join kan dit niet, want ik moet alleen de meest recente prijs hebben. Tenzij ik die join combineer met een subquery die de datum van de meest recente prijs (die niet in de toekomst ligt) ophaalt.
Zoek-queries worden hierdoor complex. Er zijn nog veel meer verschillende tabellen, hierboven noemde ik enkele voorbeelden. Er moeten veel zoek-mogelijkheden zijn.
Hoe los ik het probleem op van de (te) complexe queries om een lijst producten weer te geven op basis van bepaalde criteria en een bepaalde sortering?
Mijn oplossing: Een index-tabel maken met voor elk beschikbare product een record met daarin de huidige prijs, huidige voorraad, bepaalde eigenschappen waar op gezocht kan worden, etc.. De lijst- en zoekfunctie werkt met die index-tabel. Index-tabel wordt periodiek opnieuw opgebouwd, mbv. een cronjob.
Zijn er betere oplossingen denkbaar?