Tredje normalform (3NF) i databaser: definition og krav til normalisering

Tredje normalform (3NF) i databaser: Lær kravene til normalisering, hvordan afhængigheder fjernes, og få praktiske eksempler til konsistente, effektive tabeller.

Forfatter: Leandro Alegsa

Tredje normalform (3NF) er en egenskab ved en relationel model, især tabeller, som er et kriterium for normalisering af databaser.

Det første kriterium for at være tredje normalform er, at tabellen skal være anden normalform.

I en tabel, der er i tredje normalform, afhænger dataene i hver kolonne i hver række kun af de kolonner, der er en del af primærnøglen. En primærnøgle er en eller flere kolonner i en række, der bruges til at identificere og indeksere den pågældende række i tabellen. Kolonner, der ikke er relateret til nogen kolonne i primærnøglen, fjernes.

 

Uddybet definition

Ud over kravet om at være i anden normalform (2NF) kræver tredje normalform, at der ikke findes transitive afhængigheder mellem ikke-nøgle-attributter. Det betyder konkret:

  • Ingen delvise afhængigheder: Hvis primærnøglen er sammensat (består af flere kolonner), må ingen ikke-nøgle-attribut afhænge kun af en del af den sammensatte nøgle (det er krav fra 2NF).
  • Ingen transitive afhængigheder: For enhver funktionel afhængighed X → A skal enten X være en supernøgle, eller A skal være en del af nogen kandidatnøgle (dvs. et "prime attribute").

Hvad er en transitiv afhængighed?

En transitiv afhængighed opstår når kolonne A bestemmer kolonne B, og kolonne B bestemmer kolonne C, så A indirekte bestemmer C via B. I en tabel med sådanne afhængigheder kan ikke-nøgle-attributter afspejle information, der egentlig hører til en anden entitet—det fører til redundans og opdateringsanomalier.

Eksempel (typisk case)

Antag en tabel Medarbejder med kolonner:

  • MedarbejderID (primærnøgle)
  • Navn
  • AfsnitsID
  • AfsnitsNavn

Her har vi funktionelle afhængigheder:

  • MedarbejderID → Navn, AfsnitsID, AfsnitsNavn
  • AfsnitsID → AfsnitsNavn

Da AfsnitsNavn afhænger af AfsnitsID (som igen afhænger af MedarbejderID), har vi en transitiv afhængighed MedarbejderID → AfsnitsNavn via AfsnitsID. Tabellen er derfor ikke i 3NF.

Løsning: split tabellen i to tabeller:

  • Medarbejder(MedarbejderID, Navn, AfsnitsID)
  • Afsnit(AfsnitsID, AfsnitsNavn)

Efter denne opdeling er begge tabeller i 3NF: AfsnitsNavn er nu bestemt direkte af primary key i tabellen Afsnit, og Medarbejder-tabellen indeholder kun attributter, der afhænger direkte af MedarbejderID.

Formel regel (alternativ formulering)

En relation R er i 3NF hvis for hver funktionel afhængighed X → A der holder i R, gælder mindst én af følgende:

  • X er en supernøgle for R, eller
  • A er et medlem af en kandidatnøgle for R (A er et "prime attribute").

Normaliseringsproces - praktiske trin

  • Identificer primærnøgler og kandidatnøgler.
  • Find alle funktionelle afhængigheder mellem kolonner.
  • Kontroller for delvise afhængigheder (2NF) og fjern dem ved at opdele tabellen hvis nødvendigt.
  • Kontroller for transitive afhængigheder: hvis en ikke-nøgle-attribut afhænger af en anden ikke-nøgle-attribut, opret en separat tabel for disse attributter.
  • Sørg for at bevare dataens integritet via fremmednøgler (foreign keys) mellem de nye tabeller.

Fordele og ulemper ved 3NF

  • Fordele: Mindre datadublering, færre opdaterings-/indsætnings-/sletningsanomalier, bedre dataintegritet og enklere vedligeholdelse.
  • Ulemper: Flere tabeller og flere JOIN-operationer i forespørgsler kan give lavere læseydelse; i nogle performance-kritiske systemer vælges bevidst denormalisering.

Relation til andre normalformer

  • For at være i 3NF skal en relation være i 1NF og 2NF først.
  • 3NF er mindre streng end Boyce–Codd Normal Form (BCNF); BCNF kræver at for hver ikke-triviel funktionel afhængighed X → Y gælder, at X er en supernøgle. Alle BCNF-tabeller er i 3NF, men ikke alle 3NF-tabeller er i BCNF.

Hvornår skal man bruge 3NF?

3NF er passende i de fleste databasedesigns hvor dataintegritet, konsistens og vedligeholdelsesvenlighed er vigtigere end maksimal forespørgselsperformance. I datawarehouses eller læseintensive systemer kan man vælge at denormalisere bevidst for hurtigere forespørgsler.

Afsluttende bemærkning

Tredje normalform er et praktisk kompromis mellem normalisering og anvendelighed: den fjerner den mest almindelige redundans (transitive afhængigheder) uden at være så streng som BCNF i alle tilfælde. God analyse af funktionelle afhængigheder og forretningsregler er afgørende for at opnå et hensigtsmæssigt 3NF-design.



Søge
AlegsaOnline.com - 2020 / 2025 - License CC3