Stel dat ik bijvoorbeeld de volgende MySQL tabellen heb:
products
Tabel met producten.
id, created_at, updated_at, name, description, barcode
product_attributes
id, product_id, attribute_name, attribute_value
stores
id, name, description, address
store_attributes
id, product_id, attribute_name, attribute_value
Merk op dat de tabellen product_attributes en store_attributes eigenlijk hetzelfde zijn.
De applicatie heeft de mogelijkheid om aan producten en aan stores attributen te koppelen in de vorm van een simpele key-value vorm.
Bij het maken van dit simpele systeem, had ik twee mogelijkheden voor de attributen tabellen:
1. Twee tabellen, dus product_attributes en store_attributes zoals ik het nu heb gedaan.
2. Eén tabel, bijvoorbeeld attributes waarin ik de key-value pairs voor zowel producten als stores in opsla.
Zie het even helemaal los van eventuele toekomstige aanpassingen of uitbreidingen.
Bij het laden van een product, moeten zijn attributen ook worden opgehaald. Bij het laden van een store moet precies hetzelfde gebeuren.
Ik vraag me af of het voordelen heeft qua snelheid als de attributen voor producten en voor stores in een aparte tabel staan. Mijn gedachte is: als ik alle attributen in een algemene attributes tabel opsla, heb ik één grote tabel. Als ik aparte tabellen maak (product_attributes en store_attributes), en MySQL de attributen voor een product bij elkaar moet zoeken, moet hij kijken in een tabel waar alleen product attributen in staan. En die aparte tabel voor product attributen is altijd kleiner dan één algemene tabel waar ik alle attributen voor verschillende dingen in zou opslaan (producten én store attributen door elkaar).
Is mijn gekozen oplossing sneller bij het ophalen van gegevens, omdat ik MySQL in een specifieke (kleinere / niet "gemengde") tabel laat zoeken omdat ik de data doe scheiden over tabellen, of werkt het niet zo?
1.996 views