Het begrijpen en toepassen van database-normalisatie: een praktische gids met uitleg en oefeningen

Inleiding

Database-normalisatie is een essentieel concept in de databaserelaties en -ontwerpen. Het helpt bij het structureren van gegevens zodat ze efficiënter, betrouwbaarder en minder redundant worden. In dit artikel bespreken we de basisprincipes van normalisatie, de drie belangrijkste normaalvormen, en hoe je deze kunt toepassen in de praktijk met concrete oefeningen. Deze informatie is gebaseerd op betrouwbare bronnen die specifiek gericht zijn op database-ontwerp en optimalisatie.

Normalisatie is vooral nuttig wanneer databases groeien en herhaalde of ongeorganiseerde structuren ontstaan. Door databases goed te normaliseren, voorkom je problemen als inconsistente gegevens, redundantie en moeilijkheden bij het bijwerken of verwijderen van gegevens. Het artikel richt zich op de eerste drie normaalvormen, die in de meeste praktische gevallen voldoende zijn om een stabiel en efficiënt databasestructuur te garanderen.

In de volgende hoofdstukken zullen we eerst de essentie van normalisatie toelichten, daarna de drie normaalvormen uitleggen, en tenslotte oefeningen geven om dit in de praktijk te toepassen. Aan het eind van het artikel geef ik een korte samenvatting en een overzicht van de gebruikte bronnen.

Wat is database-normalisatie?

Normalisatie is een proces waarmee databases worden gestructureerd om redundante gegevens te verminderen en de dataintegriteit te waarborgen. Het houdt in dat tabellen worden ontworpen op een manier waarbij elk gegevensitem op de juiste plek staat en geen onnodige herhaling optreedt.

Een goed genormaliseerde database zorgt ervoor dat:

  • Gegevens gemakkelijk te beheren zijn.
  • Er minder fouten optreden bij het bijwerken van records.
  • Queries efficiënter kunnen worden uitgevoerd.
  • De database groeit op een gestructureerde manier, zonder dat het ontwerp te complex wordt.

De basis van normalisatie ligt in het toepassen van zogenaamde normaalvormen, die elke keer een bepaalde regel of voorwaarde stellen voor de structuur van de tabellen. De drie belangrijkste normaalvormen — de eerste, tweede en derde — vormen samen de kern van het normaliseringsproces.

De eerste normaalvorm (1NF)

De eerste normaalvorm vereist dat elk snijpunt van een rij en een kolom slechts één waarde bevat. Dit betekent dat je geen meerdere waarden in één veld mag opslaan. Bijvoorbeeld, in plaats van een kolom “Cursussen” met meerdere cursusnaam in één veld, moet je dit splitsen in meerdere rijen of tabellen.

Een voorbeeld: stel je hebt een tabel met werknemers en de cursussen die zij volgen. Als je de cursussen in één veld opslaat, zoals Office 365, SQL, HTML & CSS, schend je de eerste normaalvorm. Je zou deze beter kunnen opslaan in een aparte tabel, bijvoorbeeld WerknemerCursus, waarbij elke rij een unieke combinatie van werknemer en cursus bevat.

Toepassing van de eerste normaalvorm

Laten we dit toepassen op een voorbeeld. Stel we hebben de volgende tabel:

Achternaam Voornaam Cursussen
Jansen Sanne Office 365, SQL, HTML
de Vries Sanne HTML & CSS, Photoshop

Deze tabel schendt de eerste normaalvorm. We normaliseren dit door een tweede tabel aan te maken:

Werknemers

Achternaam Voornaam
Jansen Sanne
de Vries Sanne

Cursussen

Cursusnaam
Office 365
SQL
HTML & CSS
Photoshop

WerknemerCursus

WerknemersID CursusID
1 1
1 2
1 3
2 3
2 4

De tweede normaalvorm (2NF)

De tweede normaalvorm stelt dat alle niet-sleutelkolommen volledig afhankelijk moeten zijn van de volledige primaire sleutel. Dit betekent dat je geen kolommen mag hebben die alleen afhankelijk zijn van een deel van de primaire sleutel.

Een klassiek voorbeeld is een tabel waarin een Ordernummer en een ProductID als primaire sleutel worden gebruikt. Stel dat je ook een kolom “Productnaam” hebt. Omdat de productnaam alleen afhankelijk is van het ProductID en niet van het Ordernummer, schend je de tweede normaalvorm.

Toepassing van de tweede normaalvorm

Laten we dit illustreren met een voorbeeld. We beginnen met een tabel:

Ordernummer ProductID Productnaam Aantal
1001 1 Office 365 2
1001 2 SQL 1
1002 1 Office 365 3

De primaire sleutel is hier het combinatie van Ordernummer en ProductID. De kolom “Productnaam” is echter alleen afhankelijk van ProductID, niet van Ordernummer. Dit schendt de tweede normaalvorm.

We normaliseren dit door de productnaam in een aparte tabel te plaatsen:

Producten

ProductID Productnaam
1 Office 365
2 SQL

Bestellingen

Ordernummer ProductID Aantal
1001 1 2
1001 2 1
1002 1 3

Nu is de tweede normaalvorm behaald, omdat alle kolommen in de Bestellingen-tabel volledig afhankelijk zijn van de volledige primaire sleutel (Ordernummer en ProductID).

De derde normaalvorm (3NF)

De derde normaalvorm vereist dat niet-sleutelkolommen niet alleen volledig afhankelijk zijn van de primaire sleutel, maar ook dat ze onafhankelijk zijn van elkaar. Dit betekent dat je geen kolommen mag hebben die afhankelijk zijn van andere niet-sleutelkolommen.

Een voorbeeld: stel je hebt een tabel met werknemers, hun afdeling en de locatie van die afdeling. De locatie is afhankelijk van de afdeling, niet van de werknemer. Dit schendt de derde normaalvorm.

Toepassing van de derde normaalvorm

We illustreren dit met een voorbeeld. Stel we hebben de volgende tabel:

Achternaam Voornaam Afdeling Locatie
Jansen Sanne ICT Utrecht
de Vries Sanne HRM Amsterdam

De locatie hangt af van de afdeling, niet van de werknemer. Dit schendt de derde normaalvorm. We normaliseren dit door de locatie in een aparte tabel te plaatsen:

Afdelingen

Afdeling Locatie
ICT Utrecht
HRM Amsterdam

Werknemers

Achternaam Voornaam Afdeling
Jansen Sanne ICT
de Vries Sanne HRM

Nu is de derde normaalvorm behaald, omdat de locatiekolom in de Afdelingen-tabel niet afhankelijk is van andere kolommen in die tabel.

Oefeningen en toepassing in de praktijk

Oefening 1: Normaliseer de volgende tabel naar de eerste normaalvorm

Tabel:

Achternaam Voornaam Cursussen
Jansen Sanne Office 365, SQL
de Vries Sanne HTML & CSS, Photoshop
van Dijk Julia Dreamweaver

Oplossing:

Werknemers

Achternaam Voornaam
Jansen Sanne
de Vries Sanne
van Dijk Julia

Cursussen

Cursusnaam
Office 365
SQL
HTML & CSS
Photoshop
Dreamweaver

WerknemerCursus

WerknemersID CursusID
1 1
1 2
2 3
2 4
3 5

Oefening 2: Normaliseer de volgende tabel naar de tweede normaalvorm

Tabel:

Ordernummer ProductID Productnaam Aantal
1001 1 Office 365 2
1001 2 SQL 1
1002 1 Office 365 3

Oplossing:

Producten

ProductID Productnaam
1 Office 365
2 SQL

Bestellingen

Ordernummer ProductID Aantal
1001 1 2
1001 2 1
1002 1 3

Oefening 3: Normaliseer de volgende tabel naar de derde normaalvorm

Tabel:

Achternaam Voornaam Afdeling Locatie
Jansen Sanne ICT Utrecht
de Vries Sanne HRM Amsterdam
van Dijk Julia ICT Utrecht

Oplossing:

Afdelingen

Afdeling Locatie
ICT Utrecht
HRM Amsterdam

Werknemers

Achternaam Voornaam Afdeling
Jansen Sanne ICT
de Vries Sanne HRM
van Dijk Julia ICT

Conclusie

Database-normalisatie is een essentieel onderdeel van goed ontwerp en beheer van databases. Het helpt bij het voorkomen van redundante en inconsistente gegevens en maakt databases efficiënter en betrouwbaarder. In dit artikel hebben we de drie belangrijkste normaalvormen besproken — de eerste, tweede en derde normaalvorm — en zijn we deze toegelicht met concrete voorbeelden en oefeningen.

Het proces van normalisatie begint met het identificeren van herhaalde en onnodige structuren en leidt tot een gestructureerde database waarin elk gegevensitem op de juiste plek staat. Door normalisatie toe te passen, zorg je ervoor dat je database goed werkt, gemakkelijk bij te werken is en goed schaalt bij groei.

Het is belangrijk om aan te houden dat normalisatie niet alleen een technische uitdaging is, maar ook een strategische keuze. Het vereist een goed begrip van de data en de relaties tussen de entiteiten in de database. In de praktijk is het vaak handig om het normaliseringsproces iteratief te benaderen: begin met een eenvoudige structuur en breid deze uit op basis van de behoeften van de organisatie.

Met oefening en ervaring kun je normalisatie snel en efficiënt toepassen, wat uiteindelijk leidt tot sterke, robuuste en betrouwbare databasestructuren.

Bronnen

  1. Beginselen van databaseontwerp
  2. Optimaliseren van databasegebruik
  3. SQL: Hoofdstuk 1

Gerelateerde berichten