Skip to main content

Splitsen N:M relatie

Normaliseren

In de vorige les hebben we de eerste stappen van het normaliseren geleerd.

Stap 1, maak een lijst

Stap 2, splits waar nodig  de attributen

Stap 3, splits waar nodig in twee entiteiten

Nu gaan we nog een stap toevoegen.

In onze vorige les hadden we het over leerlingen en hun studiecoach. In dat voorbeeld had één studiecoach meerdere leerlingen maar een leerling had één studiecoach.

De relatie studiecoach:leerling was 1:N

Maar het kan ook anders, namelijk:

De relatie studiecoach:leerling is N:M

Dat betekent dat een studiecoach meerdere leerlingen heeft, maar dat andersom ook geldt dat een leerlingen meerdere studiecoaches heeft.

Laten we de stappen nog een keer doorlopen met dit nieuwe voorbeeld.

Stap1, maak een lijst

image-1632423177376.png

In dit voorbeeld heeft Bailey Spears twee studiecoaches: Judit Mustafa en Ales Maxwell.

Stap 2, splits attributen

Dit is in dit voorbeeld al gedaan dus dit hoeft niet verder meer.

Stap 3, splits waar nodig in entiteiten

We moeten nu ook splitsen, maar omdat we meer studiecoaches per leerling kunnen hebben moeten we anders splitsen. Let op dat in het voorbeeld er twee studiecoaches bij één leerling horen. Het zou ook zo kunnen zijn dat er drie of nog meer studiecoaches aan één leerling kunnen worden gekoppeld.

Als we dit soort situaties tegen komen waar de relatie N:M is. dan moeten we splitsen via een koppelentiteit.

image-1632410260924.png

We zien nu drie entiteiten; leerling, studiecoach en de koppelentiteit. Kijk goed naar de nummers in de koppelentiteit. Zie je hoe de koppeling werkt? De koppeling verbind als het ware de linker entiteit leerling met de rechter entiteit studiecoach. In de koppelentiteit staan telkens twee ID's die verwijzen naar een leerling en een studiecoach. Dus leerling 213421 is gekoppeld aan studiecoach 1 en dezelfde leerling 213421 is ook gekoppeld aan studiecoach 2.

Keys van de koppelentiteit

In de koppelentiteit moet je nog een PK plaatsen. Een PK mag een samengestelde key zijn Dat is een key die uit twee of meer velden bestaat. De combinatie leerling_id en studiecoach_id is altijd uniek en zou dus een PK kunnen zijn.

In de praktijk is het echter veel eenvoudiger om gewoon nog een extra key ID toe te voegen.

image-1632423535537.png

Opdracht 1

De koppelentiteit vertaald zich in een database naar een koppeltabel. In deze korte uitleg wordt nog een keer uitgelegd wat de functie van de koppeltabel is.


Als je tussen student en vak een N:M relatie hebt dan moet je een koppeling maken met een koppelentiteit.

Vraag 1

Stel dat je voor elke vak voor elke leerling wil vastleggen welk cijfer hij voor dat vak heeft, waar leg je dat dan vast? Dus in welke entiteit (tabel) wordt het cijfer vastgelegd?

  1. student
  2. vak
  3. koppel
  4. cijfer

(het antwoord staat in de video).

Vraag 2

Hoeveel FK's (foreign keys) staan er in de koppelentiteit/koppeltabel?

  1. 0
  2. 1
  3. 2
  4. 3
Vraag 3

Een relatie in een ERD heeft een kraaienpootje. Het kraaienpootje staat altijd bij een....

  1. de PK, de primary key
  2. de FK, de foreign key
  3. de koppelentiteit
  4. is niet te zeggen

Opdracht 2

Maak een ERD van de volgende drie entiteiten. Neem daarbij ook de koppelentiteit op. Benoem de keys, PK en FK en teken de relaties op de juiste manier.

image-1632410260924.png

Lever een schermafdruk in van je ERD.

Opdracht 3

Maar een ERD van de volgende gegevens. Bepaal de entiteiten, attributen, keys en relaties.

image-1632422136615.png

Lever een schermafdruk in van je ERD.

Opgave 4, Fietsenmaker Snelle Jelle

In de video die bij de opgave hoort gaan uit van drie basis regels voor het normaliseren:

  1. Geen dubbele kolommen, anders afsplitsen
  2. Alle regels moeten uniek zijn
  3. Geen afgeleide kolommen

Om tot deze basis regels te komen passen we de technieken toe die we hebben geleerd.

Fietsenmaker Snelle Jelle wil na een reparatiebeurt zijn klanten per SMS of Whatspapp op de hoogte stellen dat de reparatie klaar is. In dit bericht wil hij ook vertellen hoe hoog de reparatiekosten zijn.

Omdat veel klanten meer dan één fiets hebben, wil hij van de fietsen ook wat kenmerken vastleggen. Hij wil het merk, model, type en kleur kunnen vastleggen. 

Van elke reparatiebeurt wil hij verder vastleggen wanneer het onderhoud plaatsvond, hoe lang de reparatie duurde, wat er is uitgevoerd en de prijs. Alle reparatiebeurten hebben een standaard prijs. Zo kost het vervangen van een binnenband 12 euro en het vervangen van de ketting op een stadsfiets 37 euro.

In deze uitleg wordt uitgelegd hoe je dit moet doen: https://youtu.be/qKuzxf2iH1I

Let op de opdracht in de video is bijna hetzelfde, maar in de video worden de prijzen van de reparatie niet vastgelegd.

Maak het ERD in Lucichart.

Lever een schermafdruk in van je ERD.

Opgave 5

Een snackbar wil bijhouden welke order door welke koerier is weggebracht, hoe laat dat was en hoeveel tijd dat heeft gekost om de bestelling weg te brengen.

Maak het ERD in Lucichart.

Lever een schermafdruk in van je ERD.

Bedenk of je zelf een ERD kan maken en bekijk dan de uitleg in de video.

https://youtu.be/B5QhBuchsRM

Opdracht 6

Maak van de volgende gegevens een ERD. Bepaal de entiteiten, attributen, keys en relaties.

Je kunt de gegevens uit de onderstaande tabel via copy/pase naar Excel overzetten. Excel kan je dan gebruiken bij het splitsen.

Student Cursus Coach telefoon_coach
Kevin Drum Digitale Vaardigheden, Rekenen, PHP Ayoub 06 1221 3268
Murvin Drake PHP, JavaScript Ayoub 06 1221 3268
John Jones, 1234 C++ Ayoub 06 1221 3268
Sally-Jane Jones HTML, Pyton Ayoub 06 1221 3268
David (getrouwd) Rekenen, PHP Ayoub 06 1221 3268
Murvin Drake PHP, JavaScript Samina 06 2100 3485
Murvin Drake C++ Samina 06 2100 3485

Maak het ERD in Lucichart.

Lever een schermafdruk in van je ERD.

Opdracht 7

Maak van de volgende gegevens een ERD. Bepaal de entiteiten, attributen, keys en relaties.

Je kunt de gegevens uit de onderstaande tabel via copy/pase naar Excel overzetten. Excel kan je dan gebruiken bij het splitsen.

lant boek_id boek ISBN Titel  uitgeleend uitleentermijn ingeleverd
Caris Villa 234189 817525766-0 De boze wollf 09/06/2021 21  
Caris Villa 234288 817333566-1 De lastige wereld 07/05/2021 21 14/05/2021
Caris Villa 134585 817525766-0 Op reis met JJ 28/04/2021 21 29/04/2021
Caris Villa 232269 817528866-3 Het grote feest 04/05/2021 21 25/05/2021
Ayana Tucker 232270 817528866-4 Het grote feest 29/05/2021 35 07/06/2021
Shola Greig 134585 817525766-0 Op reis met JJ 28/05/2021 21  

Lever een schermafdruk in van je ERD.

Opdracht 8

Bij autohandel “Krakkemik” staan er auto's van verschillende merken op het terrein. In hun database staat bijvoorbeeld dat er; een rode Opel Astra uit 1998 voor 1500 euro te koop is, een groene Ford Escort uit 2002 voor 2000 euro en een Peugeot waarvan de prijs 4000 euro is.

Herken jij de entiteit? Van wat wordt hier gegevens vastgelegd?

En wat zijn de attributen van de entiteit? Benoem alle attributen.

Maak het ERD in Lucichart.

Lever een schermafdruk in van je ERD.

Opgave 9, ToDo App

Maak een datamodel (ERD) voor een ToDo applicatie. In de Todo applicatie wil je de naam van een ToDo item kunnen vastleggen. Van elk ToDo item wil je de titel kunnen vastleggen, bijvoorbeeld "paspoort verlengen". Verder wil je van elk ToDo item vastleggen wanneer hij is aangemaakt en of hij afgerond is.

Verder wil je de ToDo items opdelen in categorieën. Bijvoorbeeld, de categorie "boodschappen", "privé" of "werk". Van elke categorie wil je vastleggen wanneer deze voor het laatst gewijzigd is.

Maak het ERD in Lucichart.

Lever een schermafdruk in van je ERD.

Opgave 10, Covid-19 test

Het RIVM wil een eenvoudige database waarin ze kunnen zien welke persoon wanneer is getest en wat de uitslag was (positief of negatief). Van alle geteste hoeft alleen de voor- en achternaam en het e-mailadres te worden vastgelegd.

Het RIVM wil ook graag weten of de geteste persoon de Corona app heeft geactiveerd. Als dat zo is dan kunnen ze namelijk via de app andere mensen op de hoogte stellen als zij langere tijd bij een positief getest persoon in de buurt zijn geweest.

Maak het ERD in Lucichart.

Lever een schermafdruk in van je ERD.

--