Splitsen1:N relatie
Normaliseren doen we in een aantal stappen.
Stap 1, maak één lijst
We beginnen met het opschrijven van alle attributen/velden die we moeten opslaan. Het is handig om dit Excel te doen. Bijvoorbeeld, stel je wilt van leerling, het leerlingnummer, de naam, de klas en de studiecoach vastleggen. Dan maak je he volgende lijstje.
Stap 2, splits attributen
Neem de lijst en bekijk of het nodig is om attributen (velden) te splitsen. In het bovenstaande voorbeeld zou het handig zijn om voor- en achternaam te splitsen. Je kunt je namelijk voorstellen dat je een lijst wilt kunnen maken gesorteerd op achternaam of juist op gesorteerd op voornaam.
Stap 3, splits in twee entiteiten
In het bovenstaande voorbeeld zien we dat de naam "Judith Mustafa" twee maal voorkomt. In het "echte leven" zou het zomaar kunnen dat deze naam 100 keer voorkomt. Wat nu als Judith Mustafa ontslag neemt en wordt vervangen door "Ray Hilton"? Dan moeten we dit meerdere maken aanpassen. Dat willen we niet.
Kijk eens naar deze tabel.
Op de eerst regel bij de voornaam van de studiecoach staat Judit en op de tweede regel staat Judith. Gaat het om dezelfde Judith en is er een tikfout gemaakt of gaat het om dezelfde studiecoach? Dit willen we ook niet.
We zien nu twee problemen die kunnen we oplossen door te gaan splitsen;
We splitsen de entiteit in twee nieuwe entiteiten: leerling en studiecoach.
In dit voorbeeld is Judit een andere persoon als Judith. Ze hebben namelijk beide een ander ID gekregen. Zou er wel een tikfout zijn gemaakt dan zou het er als volt hebben uitgezien.
Relatie
Bij deze vorm van splitsen (we leren nog een andere methode) splits je altijd in een 1:1 of een 1:N relatie. Dat is een één op één of een één op veel relatie (1:N staat voor één op veel). Je zult zien dat je vrijwel altijd een 1:N relatie overhoud. In een ERD komen 1:1 relaties niet vaak voor, ook daar volgt later meer uitleg over.
Hoe zit het nu met het voorbeeld? Heeft één leerling meerdere studiecoaches of heeft één studiecoach meerdere leerlingen?
In dit voorbeeld heeft één studiecoach meerdere leerlingen.
Wanneer wel en wanneer niet afsplitsen?
Maar wacht eens even.... waarom moeten we klas niet afsplitsen? Klassen komen toch ook meerdere keren voor? Laten we klas eens afsplitsen en kijken wat er gebeurt.
Je ziet dat we in de eerste entiteit leerling klas hebben vervangen door de foreign key klas_id. Klas staat dan in een aparte entiteit en heeft een primary key ID. Wat was ook alweer een primary key? Ja dat was een uniek attribuut. In de entiteit klas is klas zelf uniek en zouden we dus geen aparte unieke key hoeven toe te voegen. Je kan de kolom ID weglaten en de foreign key in de leerling entiteit wordt dan klas.
En als we dit dan zien dan kunnen we de entiteit dus net zo goed weglaten.
De regels voor het normaliseren zijn zo dat je door splitsen moet voorkomen dat je dubbele gegevens vast legt zoal in het voorbeeld naam ven de studiecoach. Maar dat geldt alleen voor stings, en dus niet voor numerieke waarden.
Voorbeelden van attributen die dubbel mogen voorkomen:
- getallen
- prijzen
- nummers
- datums
- temperatuur
- klasnummer
- ...
Je ziet dus dat als je een klasnummer hebt dat je dat niet afsplitst.
Stel elke klas heeft naam zoals klas 'Code Warriors', 'Fast Hackers', 'Genius Coders',... dan zou je die wel afsplitsen:
Opdracht 1
Een garage wil van zijn kanten de volgende gegevens vastleggen:
Splits dit op in drie entiteiten en voeg de primary keys toe.
Werk het uit in Excel en lever Excel bestand in.
Opdracht 2
De stappen voor normaliseren (tot nu toe) die je hebt geleerd zijn;
- één lijst maken
- attributen splitsen
- entiteiten splitsen
Bepaal welke stappen je nodig hebt om onderstaand lijstje te normaliseren.
Maak drie entiteiten en voeg de primary keys toe.
Werk het uit in Excel en lever Excel bestand in.
Opdracht 3
Werk de twee gesplitste entiteiten uit het voorbeeld verder uit tot een ERD.
Voeg keys (PK en FK) toe en teken de relatie. Gebruik Lucichart.
Lever een schermafdruk in.
Opdracht 4
Bekijk dit lijstje.
Tijd om te laten zien dat je alle stappen beheerst!
Gebruik de stappen zoals je die hebt geleerd en maak een ERD in Lucichart.
Schrijf eerst alle gegevens op, en splits de attributen en de entiteiten waar nodig.
Maakt het complete ERD met datatypes, keys en relaties.
Kom je er niet uit, kijk dan naar dit filmpje: https://web.microsoftstream.com/video/856f3111-8f95-440c-8434-573e5063eb17
Let op het splitsen wordt in het filmpje op een iets andere manier uitgelegd als in deze les, maar het resultaat is hetzelfde.
Best lastig he? Kom je er nog niet uit, kijk dan naar deze video: https://youtu.be/6CDc2IMbTiw
Kom je er na het kijken van beide video's nog niet uit, probeer dan duidelijk aan te geven wat je niet begrijpt en vraag hulp aan jouw docent.
Kom je er wel uit (met of zonder video's)? Check dan je foreign keys! Staat bij elke foreign key een relatie en staat het 'harkje' aan de kant van de foreign key?
Goed gedaan, je zit al bijna op examen-niveau!
Lever een schermafdruk van je ERD in.
Succes!
--