Die dritte Normalform (3NF) baut auf der zweiten Normalform (2NF) auf und beseitigt transitive Abhängigkeiten: Ein Nicht-Schlüsselattribut darf nicht von einem anderen Nicht-Schlüsselattribut abhängen. Jedes Nicht-Schlüsselattribut muss direkt vom Primärschlüssel abhängen – und nur von ihm.
Was ist eine transitive Abhängigkeit?
Eine transitive Abhängigkeit liegt vor, wenn ein Attribut C über ein Zwischenattribut B vom Schlüssel A abhängt: A bestimmt B, B bestimmt C – und damit bestimmt A auch C, obwohl C nicht direkt zum Schlüssel gehört. Genau diese Kette wird in der 3NF aufgelöst.
Beispiel: 3NF verletzt
-- Schlecht: ort haengt transitiv von plz ab
CREATE TABLE kunde (
kunden_id INT PRIMARY KEY,
name VARCHAR(100),
plz VARCHAR(5),
ort VARCHAR(100)
);
Die Postleitzahl bestimmt den Ort. Ändert sich die Zuordnung, müsste sie in vielen Zeilen gepflegt werden. Die Lösung: plz und ort in eine eigene Tabelle auslagern und im Kunden nur die plz als Fremdschlüssel führen.
-- Gut: PLZ-Ort-Zuordnung in eigener Tabelle
CREATE TABLE ort_plz (
plz VARCHAR(5) PRIMARY KEY,
ort VARCHAR(100)
);
CREATE TABLE kunde (
kunden_id INT PRIMARY KEY,
name VARCHAR(100),
plz VARCHAR(5),
FOREIGN KEY (plz) REFERENCES ort_plz(plz)
);
3NF und BCNF
Die 3NF wurde 1971 von Edgar F. Codd definiert. Eine strengere Variante ist die Boyce-Codd-Normalform (BCNF), die auch Abhängigkeiten durch sich überlappende Kandidatenschlüssel verbietet. Für die meisten Anwendungen ist die 3NF – zusammen mit der 1NF und der 2NF – das übliche Ziel der Normalisierung; darüber hinaus (4NF/5NF) nur bei speziellen Anforderungen.
Verwandte Grundlagen: Datenbank-Normalisierung, Datenbankschema, Transaktionen.