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
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.
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.
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?
- student
- vak
- koppel
- cijfer
(het antwoord staat in de video).
Vraag 2
Hoeveel FK's (foreign keys) staan er in de koppelentiteit/koppeltabel?
- 0
- 1
- 2
- 3
Vraag 3
Een relatie in een ERD heeft een kraaienpootje. Het kraaienpootje staat altijd bij een....
- de PK, de primary key
- de FK, de foreign key
- de koppelentiteit
- 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.
Lever een schermafdruk in van je ERD.
Opdracht 3
Maar een ERD van de volgende gegevens. Bepaal de entiteiten, attributen, keys en relaties.
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:
- Geen dubbele kolommen, anders afsplitsen
- Alle regels moeten uniek zijn
- 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.
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.
--