# 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](https://www.roc.ovh/uploads/images/gallery/2021-09/scaled-1680-/image-1632423177376.png)](https://www.roc.ovh/uploads/images/gallery/2021-09/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](https://www.roc.ovh/uploads/images/gallery/2021-09/scaled-1680-/image-1632410260924.png)](https://www.roc.ovh/uploads/images/gallery/2021-09/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](https://www.roc.ovh/uploads/images/gallery/2021-09/scaled-1680-/image-1632423535537.png)](https://www.roc.ovh/uploads/images/gallery/2021-09/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](https://www.roc.ovh/uploads/images/gallery/2021-09/scaled-1680-/image-1632410260924.png)](https://www.roc.ovh/uploads/images/gallery/2021-09/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](https://www.roc.ovh/uploads/images/gallery/2021-09/scaled-1680-/image-1632422136615.png)](https://www.roc.ovh/uploads/images/gallery/2021-09/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](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](https://lucid.app). 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](https://lucid.app). 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](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.
StudentCursusCoachtelefoon\_coach
Kevin DrumDigitale Vaardigheden, Rekenen, PHPAyoub06 1221 3268
Murvin DrakePHP, JavaScriptAyoub06 1221 3268
John Jones, 1234C++Ayoub06 1221 3268
Sally-Jane JonesHTML, PytonAyoub06 1221 3268
David (getrouwd)Rekenen, PHPAyoub06 1221 3268
Murvin DrakePHP, JavaScriptSamina06 2100 3485
Murvin DrakeC++Samina06 2100 3485
Maak het ERD in [Lucichart](https://lucid.app). 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.
lantboek\_idboek ISBNTitel uitgeleenduitleentermijningeleverd
Caris Villa234189817525766-0De boze wollf09/06/202121
Caris Villa234288817333566-1De lastige wereld07/05/20212114/05/2021
Caris Villa134585817525766-0Op reis met JJ28/04/20212129/04/2021
Caris Villa232269817528866-3Het grote feest04/05/20212125/05/2021
Ayana Tucker232270817528866-4Het grote feest29/05/20213507/06/2021
Shola Greig134585817525766-0Op reis met JJ28/05/202121
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](https://lucid.app). 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](https://lucid.app). 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](https://lucid.app). Lever een schermafdruk in van je ERD. \--