Meer-meer: werkt in een ERD, maar niet in een relationele database

Meer-meer: werkt in een ERD, maar niet in een relationele database#

Soms ontstaat er in een ERD een zogenaamde meer-meerrelatie. Dat betekent dat de ERDish-zinnen in beide richtingen ‘meer’ bevatten.

Bijvoorbeeld de relatie tussen klanten en producten:

  • product en klant

    • Ieder product wordt gekocht door nul of meer klanten.

    • Iedere klant koopt één of meer producten.

Hier hoort in eerste instantie het volgende ERD bij:

Plaatje van klant bestelt product

Als we dit zouden willen opslaan in twee tabellen, dan lukt dat niet goed: als we in de tabel klant een productkolom zouden opnemen, dan kan de klant maar 1 product bestellen. En als we bij product een klant zouden willen opnemen, dan kan maar 1 klant dat product bestellen.

Met product bedoelen we bijvoorbeeld ‘een zwart T-shirt in maat M’, waarvan de winkel er honderd heeft liggen.

Een oplossing zou kunnen zijn dat we voor elk individueel ding een rij aanmaken in de database, maar dat voelt raar; we gaan dan heel vaak hetzelfde zeggen in de databasetabel alleen maar om dit probleem op te lossen.

Vaak betekent een meer-meerrelatie eigenlijk iets op zichzelf en kunnen we een tabel bestelling erbij maken. Die kan dan verwijzen naar klant en product. Nog handiger is het om een vierde entiteit erbij te maken, die van de ‘bestelregel’: wat als ik vier zwarte T-shirts wil bestellen?

De “klassieke” structuur voor klanten die producten kopen wordt dan als volgt:

Plaatje van klant die bestellingen kan plaatsen

Op deze manier is er geen enkele meer-meerrelatie.

Oefening 1

Maak voor jezelf de ERDish-zinnen bij elke relatie in bovenstaand ERD (dus zes ERDish-zinnen). Klap daarna de uitwerking hieronder open om je zinnen te controleren.