Inhoud

De veel op veel relatie

De veel op veel relatie is een relatie waarbij meerdere rijen uit tabel A gekoppeld kunnen zijn aan meerdere rijen uit tabel B. Een voorbeeld is een school, waarbij docenten les geven aan studenten. Elke docent geeft les aan 0, 1 of meer studenten. Andersom kan elke student les krijgen van 0, 1 of meerdere docenten. Een ander voorbeeld is de relatie tussen biermerken en leveranciers. Elke leverancier levert meerdere biermerken, maar elk biermerk kan ook door meerdere leveranciers geleverd worden. De veel op veel relatie modelleer je met drie tabellen. Twee brontabellen en één koppeltabel.

Cursus

Tabel A en tabel B zijn beide tabellen met een primaire sleutel. Tabel A_B verbindt records uit tabel A en B en heet een 'koppeltabel'. Een koppeltabel bestaat uit maar twee kolommen die allebei een vreemde sleutel bevatten. De vreemde sleutel in de linkerkolom verwijst naar de primaire sleutel uit tabel A en die in de rechterkolom naar de primaire sleutel uit tabel B. De primaire sleutel in koppeltabel A_B issamengestelduit de twee vreemde sleutels. Je ziet in het voorbeeld dan ook dat decombinatievan de twee velden uniek moet zijn in koppeltabel A_B. In het klantcontactsysteem komt (vooralsnog) geen veel op veel relatie voor, daarom staat hieronder een voorbeeld met bieren en hun leveranciers.

veel

Bovenstaande tabellen koppelen bieren en leveranciers in een veel op veel relatie. Eén bier kan door 0, 1 of meerdere leveranciers geleverd worden. Gentse Tripel (157) wordt bijvoorbeeld geleverd door Horeca Import NL (157, AC001), Jansen Horeca (157, AB899) en Petersen Drankenhandel (157, AC009). Andersom levert Petersen Drankenhandel 3 bieren uit de bierentabel, te weten Gentse Tripel (157, AC009), Uilenspiegel (158, AC009) en Jupiler (163, AC009).

Merk op dat in bovenstaande tabellen de primaire sleutelvelden blauw en onderstreept zijn weergegeven. In modellen van relationele databases worden primaire sleutels vaak onderstreept. Zoals je ziet is de primaire sleutel van de koppeltabel 'bier_leverancier' samengesteld uit twee velden. Elke rij in de koppeltabel bestaat uit de combinatie van een bier_id met een leverancier_id. Deze tabel bestaat zogezegd uit een samengestelde primaire sleutel. Primaire sleutels moeten uniek zijn, dus de combinaties moeten uniek zijn in de tabel.

Een ander goed gebruik is om in databasemodellen relaties te benoemen. Je zou bij de hierboven afgebeelde relatie in een model de opmerkingen "levert" kunnen zetten. Elke rij in de tabel zegt namelijk "bier X wordt geleverd door leverancier Y", of "Leverancier Y levert bier X". Het benoemen van relaties maakt een databasemodel leesbaarder. Deze benoeming komt niet terug in de eigenlijke database of in de software die gebruik maakt van de database.