Den tredje normalformen ( eng. Third normalform ; förkortas 3NF ) är en av de möjliga normalformerna av en relation i en relationsdatabas . 3NF formulerades ursprungligen av E. F. Codd 1971 .
En relationsvariabel R är i 3NF om och endast om följande villkor är sanna:
Förklaringar till definitionen:
Ett icke-nyckelattribut för en relation R är ett attribut som inte tillhör någon av kandidatnycklarna till R .
Det funktionella beroendet av en attributuppsättning Z på en attributuppsättning X (skrivet X → Z , uttalas "x bestämmer z") är transitivt om det finns en attributuppsättning Y så att X → Y och Y → Z. Samtidigt är ingen av mängderna X , Y och Z en delmängd av den andra, det vill säga de funktionella beroendena X → Z , X → Y och Y → Z är inte triviala , och det finns inte heller något funktionellt beroende Y → X.
En definition av 3NF som motsvarar Codds men formulerad annorlunda gavs av Carlo Zaniolo 1982 . Enligt den finns en relationsvariabel i 3NF om och endast om vart och ett av dess funktionella beroenden X → A uppfyller minst ett av följande villkor:
Zaniolos definition definierar tydligt skillnaden mellan 3NF och den mer stringenta Boyce-Codd Normal Form (BCNF): BCNF eliminerar det tredje villkoret (" A är ett nyckelattribut").
En minnesvärd och traditionellt beskrivande sammanfattning av Codds 3NF-definition gavs av Bill Kent : varje icke-nyckelattribut "bör ge information om nyckeln, den fullständiga nyckeln och inget annat än nyckeln" [1] .
Villkoret att vara beroende av "full nyckel" för icke-nyckelattribut säkerställer att relationen är i andra normalform; och villkoret för att de ska vara beroende av "ingenting annat än nyckeln" är att de är i tredje normalform.
Chris Date talar om Kents sammanfattning som en "intuitivt attraktiv egenskap" av 3NF, och observerar att den, med en liten modifiering, också kan fungera som en definition av den striktare Boyce-Codd normalformen : "varje attribut måste ge information om en nyckel , en hel nyckel, och inget annat än nyckeln. Kents version av 3NF-definitionen är mindre strikt än Boyce-Codds normala version av Datas formulering, eftersom den förstnämnda endast anger att icke-nyckelattribut är beroende av nycklar. Primära attribut (som är nycklar eller delar av dem) behöver inte alls vara funktionellt beroende; var och en av dem ger information om nyckeln genom att tillhandahålla själva nyckeln eller en del av den. Det bör noteras här att denna regel endast är giltig för icke-nyckelattribut, eftersom applicering av den på alla attribut helt kommer att inaktivera alla komplexa alternativa nycklar, eftersom varje element i en sådan nyckel bryter mot villkoret "full nyckel".
Betrakta relationsvariabeln R1 som ett exempel:
Anställd | Avdelning | Telefon |
---|---|---|
Grishin | Bokföring | 11-22-33 |
Vasiliev | Bokföring | 11-22-33 |
Petrov | Tillförsel | 44-55-66 |
Varje anställd tillhör uteslutande en avdelning; varje avdelning har en enda telefon. Attributet Employee är den primära nyckeln. Anställda har inga personliga telefoner och den anställdes telefonnummer beror enbart på avdelningen.
I exemplet finns följande funktionella beroenden: Anställd → Avdelning , Avdelning → Telefon , Anställd → Telefon .
Relationsvariabeln R1 är i andra normalform eftersom varje attribut har ett irreducerbart funktionellt beroende av den potentiella nyckeln Employee .
Relationen Anställd → Telefon är transitiv, så relationen är inte i tredje normalform.
Att dela R1 resulterar i två relationsvariabler som finns i 3NF:
Avdelning | Telefon |
---|---|
Bokföring | 11-22-33 |
Tillförsel | 44-55-66 |
Anställd | Avdelning |
---|---|
Grishin | Bokföring |
Vasiliev | Bokföring |
Petrov | Tillförsel |
Den initiala relationen R1, om nödvändigt, erhålls lätt som ett resultat av operationen att förena relationerna R2 och R3.
normala former | |
---|---|