Tredje normalformen (3NF): definition, regler och exempel för databaser

Lär dig tredje normalformen (3NF): tydlig definition, regler och praktiska exempel för effektiv normalisering av databastabeller och bättre datakvalitet.

Författare: Leandro Alegsa

Tredje normalformen (3NF) är en egenskap hos en relationsmodell, särskilt tabeller, och är ett standardkriterium för normalisering av databaser. Målet med 3NF är att eliminera redundans och undvika uppdaterings‑, insättnings‑ och raderingsanomali genom att se till att varje icke‑nyckelattribut beror direkt och uteslutande på en primärnyckel (eller kandidatnyckel) och inte via ett annat icke‑nyckelattribut.

Formell definition och regler

  • För att en relation ska vara i 3NF måste den först vara i andra normalform (2NF).
  • Utöver 2NF krävs att det inte finns några transitiva beroenden. Det betyder att inga icke‑nyckelattribut får bero på andra icke‑nyckelattribut.
  • En vanlig formell formulering: För varje funktionellt beroende X → A i relationen gäller antingen att X är en supernyckel eller att A är ett "prime"-attribut (dvs. en del av någon kandidatnyckel).
  • Begrepp att känna till:
    • Kandidatnyckel: ett minimalt attributset som identifierar en rad.
    • Primärnyckel: en vald kandidatnyckel för tabellen.
    • Prime-attribut: ett attribut som ingår i någon kandidatnyckel.
    • Transitivt beroende: A beror på B och B beror på C, vilket innebär att A transitivt beror på C.

Praktiskt exempel

Antag en tabell "Anställd" med kolumnerna:

  • AnstalldID (Primärnyckel)
  • Namn
  • AvdelningID
  • Avdelningsnamn

Här finns ett transitivt beroende: Avdelningsnamn beror på AvdelningID, och AvdelningID beror på AnstalldID. Således beror Avdelningsnamn transitivt på primärnyckeln AnstalldID. Detta bryter mot 3NF eftersom Avdelningsnamn är ett icke‑nyckelattribut som beror på ett annat icke‑nyckelattribut.

Lösning: dela upp tabellen i två relationer:

  • Anstalld(AnstalldID, Namn, AvdelningID)
  • Avdelning(AvdelningID, Avdelningsnamn)

Efter uppdelningen beror varje icke‑nyckelattribut i varje tabell direkt på sin primärnyckel — tabellerna är i 3NF.

Steg för att normalisera till 3NF

  1. Identifiera alla funktionella beroenden i tabellen.
  2. Bestäm kandidatnycklar och primärnyckel.
  3. Säkerställ att tabellen är i 1NF (atomära värden) och 2NF (inga partiella beroenden för sammansatta nycklar).
  4. Lokalisera transitiva beroenden (icke‑nyckelattribut som beror på andra icke‑nyckelattribut).
  5. Skapa nya tabeller för attribut som orsakar transitiva beroenden och ersätt dem med referenser (främmande nycklar).
  6. Granska om de nya tabellerna uppfyller 3NF och bevara referentiell integritet.

Skillnad mellan 3NF och BCNF

Både 3NF och Boyce–Codd Normal Form (BCNF) syftar till att ta bort oönskade beroenden, men BCNF är striktare. I BCNF måste för varje icke‑trivialt funktionellt beroende X → A vara X en supernyckel. I 3NF tillåts undantag när A är ett prime‑attribut. Därför kan en relation vara i 3NF men inte i BCNF om det finns beroenden där vänstersidan inte är en supernyckel men högersidan är en del av någon kandidatnyckel.

Varför använda 3NF?

  • Minskar dataduplicering och sparar lagringsutrymme.
  • Minskar risken för inkonsekvens vid uppdateringar.
  • Gör underhåll enklare och ökar tydligheten i datamodellen.
  • Kan förbättra vissa typer av frågor genom tydligare relationer, men kan också kräva fler joins i SQL‑frågor — en avvägning mellan prestanda och dataintegritet.

Exempel på SQL (schematiskt)

 -- Innan normalisering (ej 3NF) CREATE TABLE Anstalld (   AnstalldID INT PRIMARY KEY,   Namn VARCHAR(100),   AvdelningID INT,   Avdelningsnamn VARCHAR(100) );  -- Efter normalisering till 3NF CREATE TABLE Avdelning (   AvdelningID INT PRIMARY KEY,   Avdelningsnamn VARCHAR(100) );  CREATE TABLE Anstalld (   AnstalldID INT PRIMARY KEY,   Namn VARCHAR(100),   AvdelningID INT,   FOREIGN KEY (AvdelningID) REFERENCES Avdelning(AvdelningID) ); 

Sammanfattningsvis säkerställer 3NF att icke‑nyckelattribut endast är beroende av kandidatnycklar direkt och inte via andra icke‑nyckelattribut. Genom att följa reglerna för 3NF reduceras redundans och dataintegriteten förbättras, samtidigt som man ibland måste väga fördelarna mot potentiell prestandapåverkan vid fler joins.



Sök
AlegsaOnline.com - 2020 / 2025 - License CC3