Die zweite Normalform (2NF) baut auf der ersten Normalform (1NF) auf und beseitigt partielle funktionale Abhängigkeiten. Sie betrifft Tabellen mit einem zusammengesetzten Primärschlüssel: Kein Nicht-Schlüsselattribut darf nur von einem Teil des Schlüssels abhängen, sondern muss vom gesamten Schlüssel abhängen.
Was ist eine partielle Abhängigkeit?
Bei einem zusammengesetzten Schlüssel aus mehreren Spalten liegt eine partielle Abhängigkeit vor, wenn ein Nicht-Schlüsselattribut nur von einem Teil des Schlüssels bestimmt wird. Ein Beispiel aus dem Schlüssel-Kontext: Der Schlüssel (bestell_id, artikel_id) bestimmt die Menge, aber der Artikelname hängt nur von artikel_id ab.
Beispiel: 2NF verletzt
-- Schlecht: Artikelname haengt nur von artikel_id ab
CREATE TABLE bestellposition (
bestell_id INT,
artikel_id INT,
menge INT,
artikel_name VARCHAR(100),
PRIMARY KEY (bestell_id, artikel_id)
);
Der Artikelname wiederholt sich bei jeder Bestellung desselben Artikels und verursacht Anomalien. Die Lösung: den Artikel in eine eigene Tabelle auslagern und in der Position nur per artikel_id darauf verweisen.
-- Gut: Artikel in eigener Tabelle
CREATE TABLE artikel (
artikel_id INT PRIMARY KEY,
artikel_name VARCHAR(100)
);
CREATE TABLE bestellposition (
bestell_id INT,
artikel_id INT,
menge INT,
PRIMARY KEY (bestell_id, artikel_id)
);
Wann 2NF automatisch gilt
Hat eine Tabelle nur einen einspaltigen Primärschlüssel, ist die 2NF automatisch erfüllt, sobald die 1NF gilt – partielle Abhängigkeiten können dann nicht entstehen. Die dritte Normalform (3NF) geht einen Schritt weiter und verbietet zusätzlich transitive Abhängigkeiten.
Verwandte Grundlagen: Datenbank-Normalisierung, Datenbankschema, SQL-JOINs.