Tweede normale vorm (2NF): uitleg en regels voor database-normalisatie

Leer 2NF eenvoudig: regels, voorbeelden en stappen voor database-normalisatie. Begrijp volledige sleutelafhankelijkheid, verwijder partiële afhankelijkheden en verbeter dataconsistentie.

Schrijver: Leandro Alegsa

De tweede normale vorm (2NF) is een eigenschap van een relationeel model, meer bepaald tabellen, die een criterium is voor de normalisering van databanken.

Het eerste criterium om een tweede normale vorm te zijn, is dat de tabel een eerste normale vorm moet hebben.

Binnen een tabel die in tweede normale vorm is, zijn de gegevens in elke kolom in elke rij afhankelijk van de gehele primaire sleutel van elke rij. Een primaire sleutel is één of meer kolommen in een rij die wordt gebruikt om die rij van de tabel te identificeren en te indexeren. Kolommen die niet gerelateerd zijn aan elke kolom in de primaire sleutel worden verwijderd. Alleen kolommen die gerelateerd zijn aan alle kolommen in de primaire sleutel worden behouden.

Wat betekent 2NF concreet?

De kern van 2NF is het uitsluiten van gedeeltelijke afhankelijkheden. Een gedeeltelijke afhankelijkheid bestaat wanneer een niet-sleutelattribuut afhankelijk is van slechts een deel van een samengestelde (composite) primaire sleutel, in plaats van van de gehele sleutel.

Belangrijke punten:

  • Als de primaire sleutel uit één kolom bestaat, voldoet de tabel automatisch aan 2NF (er kunnen geen gedeeltelijke afhankelijkheden bestaan).
  • 2NF vereist geen oplossing voor transitieve afhankelijkheden (dat is het onderwerp van de derde normale vorm, 3NF).
  • 2NF richt zich vooral op tabellen met samengestelde sleutels — dat is wanneer de meeste redundantie en update-anomalieën door gedeeltelijke afhankelijkheden ontstaan.

Waarom is 2NF nuttig?

  • Vermindert redundantie: voorkomt dat dezelfde informatie meerdere keren wordt opgeslagen.
  • Voorkomt update-, insert- en delete-anomalieën: wijzigingen hoeven op minder plaatsen te gebeuren.
  • Maakt de logische structuur van data duidelijker en onderhoudsvriendelijker.

Hoe herken en los je gedeeltelijke afhankelijkheden op?

Een praktische werkwijze:

  • Identificeer de primaire sleutel (controleer of het een samengestelde sleutel is).
  • Bekijk elk niet-sleutelattribuut en bepaal of het afhankelijk is van de gehele sleutel of slechts van een deel.
  • Als een attribuut slechts van een deel afhankelijk is, verplaats dat attribuut naar een nieuwe tabel waarin dat deel van de sleutel de primaire sleutel wordt.
  • Houd in de oorspronkelijke tabel alleen attributen die afhankelijk zijn van de volledige primaire sleutel en voeg waar nodig buitenlandse sleutels (foreign keys) toe om relaties te behouden.

Voorbeeld

Stel een tabel Enrollment met kolommen:

  • student_id (deel van primaire sleutel)
  • course_id (deel van primaire sleutel)
  • student_name
  • course_name
  • grade

De primaire sleutel is (student_id, course_id). Hier zijn voorbeelden van gedeeltelijke afhankelijkheden:

  • student_name is afhankelijk van student_id, niet van course_id — gedeeltelijke afhankelijkheid.
  • course_name is afhankelijk van course_id, niet van student_id — gedeeltelijke afhankelijkheid.

Om naar 2NF te normaliseren, splits je de tabel op bijvoorbeeld in:

  • Students(student_id, student_name)
  • Courses(course_id, course_name)
  • Enrollments(student_id, course_id, grade) — met (student_id, course_id) als samengestelde primaire sleutel en foreign keys naar Students en Courses

Regels en vuistregels

  • Controleer altijd eerst 1NF: geen herhalende groepen en atomic waarden.
  • Zoek naar attributen die "horen" bij slechts een deel van de samengestelde sleutel en verplaats ze naar aparte tabellen.
  • Bewaar referentiële integriteit met foreign keys zodat relaties tussen gesplitste tabellen behouden blijven.
  • Wees bewust van prestatie-overwegingen: normaliseren vermindert redundantie maar kan meer joins vereisen bij queries.

Beperkingen en vervolgstappen

2NF elimineert gedeeltelijke afhankelijkheden, maar laat transitieve afhankelijkheden onveranderd. Om ook transitieve afhankelijkheden te verwijderen (bijvoorbeeld wanneer A → B en B → C, zodat A → C transitief is), normaliseer je verder naar de derde normale vorm (3NF) of Boyce-Codd Normal Form (BCNF) waar nodig.

Samenvatting

De tweede normale vorm (2NF) bouwt voort op de eerste normale vorm en zorgt ervoor dat elk niet-sleutelattribuut volledig afhankelijk is van de gehele primaire sleutel. Dit voorkomt redundantie en anomalieën die ontstaan door gedeeltelijke afhankelijkheden, vooral bij tabellen met samengestelde sleutels. Het normalisatieproces vereist vaak het opsplitsen van tabellen en het gebruiken van foreign keys om relaties te behouden.



Zoek in de encyclopedie
AlegsaOnline.com - 2020 / 2025 - License CC3