Relaties¶
Bij Databases werken wij met relationele databases, dat wilt zeggen dat wij gegevens opslaan in tabellen en dat we deze tabellen aan elkaar verbinden.
Deze pagina neemt je mee in hoe je de verschillende relaties kan leggen in MySQL Workbench. Dit doen we aan de hand van de toolbar in MySQL Workbench zelf:

Wanneer je gebruik maakt van deze relaties gaan we er vanuit dat je nog geen verwijzende kolommen (foreign key’s) hebt aangemaakt in de tabellen, behalve bij de laatste ‘Relatie met bestaande kolommen’.
Elke relatie wordt hier uitgelegd met een voorbeeld.
1. Eén op één (niet identificerende relatie)¶
Bij een één op één relatie leg je een koppeling tussen 2 tabellen waarbij er maximaal één uit elk tabel bij elkaar kunnen horen.
Hoe je dit toepast leggen wij uit aan de hand van twee tabellen, Land en Hoofdstad:

Na het drukken op de knop één op één (1:1) zie je het volgende gebeuren:
- Selecteer eerst de tabel waarin je de Foreign Key wilt opnemen, in dit geval kiezen we voor de tabel Hoofdstad omdat het aannamelijker is dat een tabel Land op zichzelf kan bestaan (dus tabel Hoofdstad zou je weg kunnen laten zonder dat dit gevolgen heeft).
- Vervolgens selecteer je de tabel waarmee je de relatie wilt leggen, in dit geval is dat tabel Land.
- Je ziet nu een één-op-één relatie verschijnen met een gestreepte lijn.
- De tabel Hoofdstad krijgt nu een extra kolom, in dit geval genaamd Land_afkorting.
- De relatie krijgt automatisch een naam(/label), in dit geval fk_Hoofdstad_Land.
Nu we de relatie hebben gelegd zijn we nog niet klaar, we moeten nu nog zorgen dat het voldoet aan onze conventions. Dat doen we als volgt:
- Alle kolomnamen moeten bestaan uit kleine letters, een kolom als Land_afkorting moeten we dus hernoemen naar land_afkorting.
- Wanneer je uit de kolomnaam al duidelijk kan halen naar welk tabel deze verwijst kan je de naam van de tabel weglaten (Bijvoorbeeld: Medewerker_medewerkernummer wordt dan medewerkernummer), in dit geval behouden we land_afkorting omdat afkorting alleen niet duidelijk genoeg is.
- Dan moeten we de relatie nog een passende naam(/label) geven, kies hierbij iets wat past bij de context van de twee tabellen. Bijvoorbeeld: ‘Land heeft als Hoofdstad’.
- Geen convention maar wel een gewoonte: Als een Foreign Key belangrijk is voor een tabel kan je deze het beste hoog in een tabel plaatsen, bijvoorbeeld onder de Primary Key.
Uiteindelijk komen we dan uit op:

2. Eén op veel (niet identificerende relatie)¶
Bij een één op veel relatie gaan we er vanuit dat één tabel gerelateerd is aan een ander tabel waarvan er meerdere kunnen zijn.
Hoe je dit toepast leggen wij uit aan de hand van twee tabellen, Boek en Auteur:

Na het drukken op de knop één op veel (1:n) zie je het volgende gebeuren:
- Selecteer eerst de tabel waarin je de Foreign Key wilt opnemen, in dit geval kiezen we voor de tabel Boek omdat je de relatie kan beschrijven als ‘een auteur schrijft meerdere boeken’, de veel uit de relatie (één op veel) ligt dus bij de tabel Boek.
- Vervolgens selecteer je de tabel waarmee je de relatie wilt leggen, in dit geval is dat tabel Auteur.
- Je ziet nu een één-op-veel relatie verschijnen met een gestreepte lijn.
- De tabel Boek krijgt nu een extra kolom, in dit geval genaamd Auteur_auteurnummer.
- De relatie krijgt automatisch een naam(/label), in dit geval fk_Boek_Auteur1.
Nu we de relatie hebben gelegd zijn we nog niet klaar, we moeten nu nog zorgen dat het voldoet aan onze conventions. Dat doen we als volgt:
- Alle kolomnamen moeten bestaan uit kleine letters, een kolom als Auteur_auteurnummer moeten we dus hernoemen naar auteur_auteurnummer.
- Wanneer je uit de kolomnaam al duidelijk kan halen naar welk tabel deze verwijst kan je de naam van de tabel weglaten, dit is in deze context het geval en dus hernoemen we auteur_auteurnummer naar auteurnummer.
- Dan moeten we de relatie nog een passende naam(/label) geven, kies hierbij iets wat past bij de context van de twee tabellen. Bijvoorbeeld: ‘Boek is geschreven door Auteur’.
- Geen convention maar wel een gewoonte: Als een Foreign Key belangrijk is voor een tabel kan je deze het beste hoog in een tabel plaatsen, bijvoorbeeld onder de Primary Key.
Uiteindelijk komen we dan uit op:

3. Eén op één (Identificerende relatie)¶
Bij een één op één relatie leg je een koppeling tussen 2 tabellen waarbij er maximaal één uit elk tabel bij elkaar kunnen horen. In dit geval is de relatie identificerend, dat houdt in dat de Foreign Key onderdeel wordt van de Primary Key.
Hoe je dit toepast leggen wij uit aan de hand van twee tabellen, Account en Profiel:

Na het drukken op de knop één op één (1:1) zie je het volgende gebeuren:
- Selecteer eerst de tabel waarin je de Foreign Key wilt opnemen, in dit geval kiezen we voor de tabel Profiel omdat een rij in de tabel Profiel niet zinvol is als er geen Account bij hoort. Profiel is dus echt afhankelijk van het bestaan van een Account.
- Vervolgens selecteer je de tabel waarmee je de relatie wilt leggen, in dit geval is dat tabel Account.
- Je ziet nu een één-op-één relatie verschijnen met een doorgetrokken lijn.
- De tabel Profiel krijgt nu een extra kolom, in dit geval genaamd Account_id, deze krijgt een rood sleuteltje als kenmerk.
- De relatie krijgt automatisch een naam(/label), in dit geval fk_Profiel_Account1.
Nu we de relatie hebben gelegd zijn we nog niet klaar, we moeten nu nog zorgen dat het voldoet aan onze conventions. Dat doen we als volgt:
- Alle kolomnamen moeten bestaan uit kleine letters, een kolom als Account_id moeten we dus hernoemen naar account_id.
- Wanneer je uit de kolomnaam al duidelijk kan halen naar welk tabel deze verwijst kan je de naam van de tabel weglaten, in dit geval behouden we account_id omdat id alleen niet duidelijk genoeg is.
- Dan moeten we de relatie nog een passende naam(/label) geven, kies hierbij iets wat past bij de context van de twee tabellen. Bijvoorbeeld: ‘Account is beschreven in Profiel’.
- Primary Key’s plaatsen we altijd bovenaan een tabel, omdat dit een identificerende relatie is maakt de Foreign Key onderdeel uit van de Primary Key en moeten we deze bovenaan in de tabel plaatsen.
Uiteindelijk komen we dan uit op:

4. Eén op veel (Identificerende relatie)¶
Bij een één op veel relatie gaan we er vanuit dat één tabel gerelateerd is aan een ander tabel waarvan er meerdere kunnen zijn. In dit geval is de relatie identificerend, dat houdt in dat de Foreign Key onderdeel wordt van de Primary Key.
Hoe je dit toepast leggen wij uit aan de hand van twee tabellen, Lied en Artiest:

Na het drukken op de knop één op veel (1:n) zie je het volgende gebeuren:
- Selecteer eerst de tabel waarin je de Foreign Key wilt opnemen, in dit geval kiezen we voor de tabel Lied omdat je de relatie kan beschrijven als ‘een artiest kan meerdere liederen zingen’, de veel uit de relatie (één op veel) ligt dus bij de tabel Lied.
- Let op: Bij het ontwerp van deze database maken we de keuze dat een Lied altijd gezongen wordt door één Artiest. Het kan in deze context niet voorkomen dat een Lied bij meerdere artiesten hoort.
- Vervolgens selecteer je de tabel waarmee je de relatie wilt leggen, in dit geval is dat tabel Artiest.
- Je ziet nu een één-op-veel relatie verschijnen met een doorgetrokken lijn.
- De tabel Lied krijgt nu een extra kolom, in dit geval genaamd Artiest_artiestennaam, deze krijgt een rood sleuteltje als kenmerk.
- De relatie krijgt automatisch een naam(/label), in dit geval fk_Lied_Artiest1.
Nu we de relatie hebben gelegd zijn we nog niet klaar, we moeten nu nog zorgen dat het voldoet aan onze conventions. Dat doen we als volgt:
- Alle kolomnamen moeten bestaan uit kleine letters, een kolom als Artiest_artiestennaam moeten we dus hernoemen naar artiest_artiestennaam.
- Wanneer je uit de kolomnaam al duidelijk kan halen naar welk tabel deze verwijst kan je de naam van de tabel weglaten, dit is in deze context het geval en dus hernoemen we artiest_artiestennaam naar artiestennaam.
- Dan moeten we de relatie nog een passende naam(/label) geven, kies hierbij iets wat past bij de context van de twee tabellen. Bijvoorbeeld: ‘Lied wordt gezongen door Artiest’.
- Primary Key’s plaatsen we altijd bovenaan een tabel, omdat dit een identificerende relatie is maakt de Foreign Key onderdeel uit van de Primary Key en moeten we deze bovenaan in de tabel plaatsen.
Uiteindelijk komen we dan uit op:

5. Veel op veel (Identificerende relatie)¶
Bij een veel op veel relatie zitten we met de situatie dat twee tabellen aan elkaar gerelateerd zijn waarbij aan beide kanten er meerdere kunnen zijn. Om dit mogelijk te maken komt er een extra tabel bij welke als Primary Key de beide Foreign Key’s krijgt, daarom is deze identificerend.
Hoe je dit toepast leggen wij uit aan de hand van twee tabellen, Docent en Student:

Na het drukken op de knop veel op veel (n:m) zie je het volgende gebeuren:
- In dit geval maakt de volgorde waarin je de relatie legt minder uit, er onstaat toch een nieuw tabel. Wel heeft dit gevolgen voor de volgorde in de naam van de tabel en de kolommen maar deze kan je handmatig altijd nog aanpassen indien nodig.
- We zien een nieuwe tabel onstaan, genaamd Docent_has_Student, een koppeltabel, deze is onstaan omdat dit de enige mogelijkheid om een veel veel-op-veel relatie te creëren.
- Beide tabellen zijn verbonden met een één-op-veel relatie met deze koppeltabel door middel van een doorgetrokken lijn.
- Beide kolommen (Docent_gebruikersnaam, Student_studentnummer) in het koppeltabel krijgen een rood sleuteltje; ze vormen samen de Primary Key én het zijn beide Foreign Key’s.
- Beide zijdes van de relatie krijgen automatisch een naam(/label), in dit geval fk_Docent_has_Student_Docent1 en fk_Docent_has_Student_Student1.
Nu we de relatie hebben gelegd zijn we nog niet klaar, we moeten nu nog zorgen dat het voldoet aan onze conventions. Dat doen we als volgt:
- Een tabelnaam begint met een hoofdletter en het daarop volgende woord ook, de term has voegt verder niks toe, we veranderen dus Docent_has_Student in DocentStudent (of andersom als dat je voorkeur heeft; StudentDocent)
- Alle kolomnamen moeten bestaan uit kleine letters, een kolom als Docent_gebruikersnaam moeten we dus hernoemen naar docent_gebruikersnaam en Student_studentnummer naar student_studentnummer.
- Wanneer je uit de kolomnaam al duidelijk kan halen naar welk tabel deze verwijst kan je de naam van de tabel weglaten, dit is in deze context het geval en dus hernoemen we student_studentnummer naar studentnummer.
- Dan moeten we de relatie nog een passende naam(/label) geven, kies hierbij iets wat past bij de context van deze situatie. Dit moet je aan beide kanten van de veel-op-veel relatie. In dit geval zou je kunnen denken aan ‘Een Docent geeft les aan Student’ en ‘Een Student krijgt les van Docent’
Uiteindelijk komen we dan uit op:

6. Relatie met bestaande kolommen¶
Als laatste hebben we nog een knop waarmee je bestaande kolommen kan koppelen aan elkaar. Deze kan je gebruiken wanneer je zelf alle Foreign Key’s al aan de tabellen hebt toegevoegd en goed weet wat je doet.
Deze tool kan je eigenlijk alleen gebruiken wanneer je de relaties goed begrijpt en weet toe te passen, omdat wij dat nog aan het leren zijn gebruiken we deze in principe niet. Je staat vrij om het natuurlijk zelf uit te proberen.