Database-ontwerp: relaties#
Een relationele database draait om de relaties die entiteiten met elkaar kunnen hebben:
klant koopt product
auto wordt onderhouden door een monteur
docent doceert één of meer vakken
We willen in een ontwerp deze relaties zo precies mogelijk vastleggen.
Een relatie werkt twee kanten op; dat werkt ook zo bij entiteiten in een database-ontwerp
Nul, een, meer? ‘kardinaliteit’#
Voor een database-ontwerp is het van belang te weten ‘hoeveel’ van de ene entiteit hoort bij de andere entiteit. Bij de analyse stellen we vragen, zoals: “Klopt het dat een klant meerdere producten in een winkelmandje kan leggen?” en “Klopt het dat een winkelmandje bij precies 1 klant hoort?”.
Dit lijken eenvoudige vragen; dit klopt voor zo’n beetje elke online winkel! Soms weten we het antwoord niet meteen zoals de vraag: Klopt het dat een patiënt maximaal 1 infuuspomp tegelijk gebruikt? (Nee, soms zijn er meer medicijnen die onafhankelijk worden toegediend…)
Om deze aantallen vast te leggen zijn er in een database-ontwerp precies vier mogelijkheden voor de relaties:
Nul of één
Precies één
Nul of meer
Eén of meer
Voorbeelden:
Van een klant weten we nul of één e-mailadres
Elke regel in een bestelling hoort bij precies één bestelling
Een product wordt gekocht door nul of meer klanten
Elke bestelling omvat één of meer producten
Maar dit is maar de helft van het verhaal! Van al deze zaken willen we ook de andere kant van de relatie weten. Bijvoorbeeld:
Iedere bestelling bestaat uit één of meer regels, en
Iedere klant koopt één of meer producten.
ERDish-zinnen#
We willen ervoor zorgen dat we structureel alle relaties in de database goed beschrijven. Dit doen we door relaties tussen entiteiten te beschrijven in een precieze structuur. Voorbeelden:
auto en monteur:
Iedere auto wordt onderhouden door precies één monteur.
Iedere monteur onderhoudt één of meer auto’s.
product en klant
Ieder product wordt gekocht door nul of meer klanten.
Iedere klant koopt één of meer producten.
Aan de voorbeelden kun je zien dat die zinnen altijd dezelfde structuur hebben:
Iedere entiteit A werkwoord …aantal… entiteit B
En dat de zinnen altijd in paren voorkomen. Als er een relatie is tussen twee entiteiten, dan moet je beide kanten van de relatie beschrijven.
Voorbeelden van ERDish-zinparen#
Iedere leerling volgt één of meer vakken. Ieder vak wordt gevolgd door nul of meer leerlingen.
Elke medewerker werkt voor precies één afdeling. Voor iedere afdeling werken één of meer medewerkers.
Elke klant plaatst nul of meer bestellingen. Iedere bestelling is voor precies één klant.
Elke gebruiker heeft één of meer accounts. Elk account hoort bij precies één gebruiker.
Entiteit-relatie-diagrammen, een plaatje zegt meer#
De ‘kardinaliteit’ die we hierboven beschreven met woorden als ‘precies één’, ‘één of meer’ tekenen we als zogenaamde kraaienpoten (de Engelse term hiervoor is crow’s feet). Dit is een veelgebruikte manier om in een diagram de hoeveelheid (kardinaliteit) van een relatie te beschrijven.
Deze kraaienpoten zien er zo uit:

Een rondje of een streep voor nul of één. Een enkele streep of drie streepjes in de vorm van een vogelpootje voor de ‘meer’-variant.
Van ERDish-zinnen naar een ERD#
We hebben ERDish-zinnen gemaakt om de relaties tussen entiteiten te beschrijven. Dit zetten we om in een diagram op de volgende manier.
auto en monteur:
Iedere auto wordt onderhouden door precies één monteur.
Iedere monteur onderhoudt één of meer auto’s.

In dit plaatje:
Wordt iedere entiteit getoond als rechthoek met afgeronde hoeken.
Zijn attributen opgenomen
Staan kraaienpoten
Staat de betekenis van de relatie beschreven op de lijn
Als er meer entiteiten zijn, dan worden die allemaal ondergebracht in een grote plaat. In het volgende hoofdstuk zien we daarvan een voorbeeld.