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.