Skip to main content

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.

image-1632404042140.png

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.

image-1632404381453.png

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.

image-1632405235058.png

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;

image-1632408246837.png

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.

image-1632408480432.png

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.

image-1632413682000.png

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.

image-1632413948728.png

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:

image-1632414587830.png

 

 

Opdracht 1

Een garage wil van zijn kanten de volgende gegevens vastleggen:

image-1632415868785.png

Splits dit op in drie entiteiten en voeg de primary keys toe.

Werk het uit in Excel

Opdracht 2

Voer de stappen 1, 2 en drie uit voor onderstaand lijstje.

image-1632415331697.png

Splits dit op in drie entiteiten en voeg de primary keys toe.

Werk het uit in Excel.

Opdracht 3

Werk de twee gesplitste entiteiten uit het voorbeeld verder uit tot een ERD.

image-1632408480432.png

Voeg keys (PK en FK) toe en teken de relatie. Gebruik Lucichart.

--