Skip to content
IRC-Coding IRC-Coding
Normalformen 1NF 2NF 3NF BCNF 4NF 5NF Datenbanknormalisierung Funktionale Abhängigkeiten

Normalformen: 1NF, 2NF, 3NF, BCNF, 4NF & 5NF komplett

Alle Normalformen der Datenbanktheorie. 1NF bis 5NF mit funktionalen Abhängigkeiten, Multi-Valued Dependencies und Join Dependencies für perfekte Datenstruktur.

S

schutzgeist

2 min read

Normalformen: 1NF, 2NF, 3NF, BCNF, 4NF & 5NF komplett

Dieser Beitrag ist eine umfassende Erläuterung aller Normalformen der Datenbanktheorie – von 1NF bis 5NF mit praktischen Beispielen.

In a Nutshell

Normalformen sind formale Regeln zur Strukturierung relationaler Datenbanken, die schrittweise Redundanz eliminieren und Datenintegrität gewährleisten. Jede höhere Normalform baut auf der vorherigen auf.

Kompakte Fachbeschreibung

Normalisierung ist der Prozess der schrittweisen Verbesserung von Datenbankstrukturen durch Anwendung formaler Regeln. Jede Normalform adressiert spezifische Anomalien und Abhängigkeiten.

Übersicht der Normalformen:

  • 1NF: Atomare Werte, keine Wiederholungsgruppen
  • 2NF: 1NF + keine partiellen Abhängigkeiten
  • 3NF: 2NF + keine transitiven Abhängigkeiten
  • BCNF: Stärkere 3NF mit strengeren Regeln
  • 4NF: 3NF + keine Multi-Valued Dependencies
  • 5NF: 4NF + keine Join Dependencies

Mathematische Grundlagen:

  • Funktionale Abhängigkeiten: X → Y
  • Multi-Valued Dependencies: X →→ Y
  • Join Dependencies: (A, B, C)

Praxisrelevanz: Die ersten drei Normalformen (1NF-3NF) sind für die meisten Anwendungen ausreichend. Höhere Normalformen (4NF-5NF) sind für komplexe Datenstrukturen und akademische Kontexte relevant.

Prüfungsrelevante Stichpunkte

  • 1NF: Atomare Werte, keine Wiederholungsgruppen, eindeutige Primärschlüssel
  • 2NF: Keine partiellen Abhängigkeiten vom zusammengesetzten Primärschlüssel
  • 3NF: Keine transitiven Abhängigkeiten über Nicht-Schlüssel-Attribute
  • BCNF: Jede Determinante ist ein Kandidatenschlüssel
  • 4NF: Keine Multi-Valued Dependencies außer trivialen
  • 5NF: Keine Join Dependencies außer durch Kandidatenschlüssel
  • Funktionale Abhängigkeiten: Grundlage der Normalisierung
  • IHK-relevant: Besonders 1NF-3NF für Datenbankdesign

Kernkomponenten

  1. Funktionale Abhängigkeit (FD): X → Y (X bestimmt Y eindeutig)
  2. Multi-Valued Dependency (MVD): X →→ Y (X bestimmt mehrere Y-Werte)
  3. Join Dependency (JD): (A, B, C) (Tabelle kann aus Joins rekonstruiert werden)
  4. Determinante: Attribut, das andere Attribute bestimmt
  5. Kandidatenschlüssel: Minimale eindeutige Identifikatoren
  6. Primärschlüssel: Ausgewählter Kandidatenschlüssel
  7. Partielle Abhängigkeit: Abhängigkeit von Teil des zusammengesetzten Schlüssels
  8. Transitive Abhängigkeit: Indirekte Abhängigkeit über Nicht-Schlüssel

Praxisbeispiele

1. Normalform (1NF)

-- Problem: Nicht-atomare Werte und Wiederholungsgruppen
CREATE TABLE Bestellungen_Schlecht (
    bestell_id INT,
    kunde VARCHAR(100),
    artikel_liste VARCHAR(500), -- Nicht-atomar
    telefonnummern VARCHAR(200) -- Wiederholungsgruppe
);

-- 1NF-Lösung: Atomare Werte
CREATE TABLE Bestellungen_1NF (
    bestell_id INT PRIMARY KEY,
    kunden_id INT,
    bestelldatum DATE
);

CREATE TABLE Bestellpositionen (
    bestell_id INT,
    positionsnummer INT,
    artikel_id INT,
    menge INT,
    PRIMARY KEY (bestell_id, positionsnummer)
);

CREATE TABLE Kunden_Telefone (
    kunden_id INT,
    telefonnummer VARCHAR(20),
    PRIMARY KEY (kunden_id, telefonnummer)
);

2. Normalform (2NF)

-- Problem: Partielle Abhängigkeiten
CREATE TABLE Bestellpositionen_2NF_Problem (
    bestell_id INT,
    artikel_id INT,
    menge INT,
    artikel_name VARCHAR(100), -- Hängt nur von artikel_id ab
    preis DECIMAL(10,2),       -- Hängt nur von artikel_id ab
    PRIMARY KEY (bestell_id, artikel_id)
);

-- 2NF-Lösung: Eliminiere partielle Abhängigkeiten
CREATE TABLE Bestellpositionen_2NF (
    bestell_id INT,
    artikel_id INT,
    menge INT,
    PRIMARY KEY (bestell_id, artikel_id)
);

CREATE TABLE Artikel (
    artikel_id INT PRIMARY KEY,
    artikel_name VARCHAR(100),
    preis DECIMAL(10,2)
);

3. Normalform (3NF)

-- Problem: Transitive Abhängigkeiten
CREATE TABLE Mitarbeiter_3NF_Problem (
    mitarbeiter_id INT PRIMARY KEY,
    name VARCHAR(100),
    abteilungs_id INT,
    abteilungs_name VARCHAR(100), -- Transitiv: abteilungs_id → abteilungs_name
    standort VARCHAR(50)           -- Transitiv: abteilungs_id → standort
);

-- 3NF-Lösung: Eliminiere transitive Abhängigkeiten
CREATE TABLE Mitarbeiter_3NF (
    mitarbeiter_id INT PRIMARY KEY,
    name VARCHAR(100),
    abteilungs_id INT
);

CREATE TABLE Abteilungen (
    abteilungs_id INT PRIMARY KEY,
    abteilungs_name VARCHAR(100),
    standort VARCHAR(50)
);

Boyce-Codd Normalform (BCNF)

-- Problem: 3NF aber nicht BCNF
CREATE TABLE Projektmitarbeiter_BCNF_Problem (
    projekt_id INT,
    mitarbeiter_id INT,
    rolle VARCHAR(50),
    PRIMARY KEY (projekt_id, mitarbeiter_id)
);

-- Funktionale Abhängigkeiten:
-- projekt_id, mitarbeiter_id → rolle
-- projekt_id, rolle → mitarbeiter_id (Determinante kein Kandidatenschlüssel!)

-- BCNF-Lösung
CREATE TABLE Projektrollen (
    projekt_id INT,
    rolle VARCHAR(50),
    mitarbeiter_id INT,
    PRIMARY KEY (projekt_id, rolle)
);

4. Normalform (4NF)

-- Problem: Multi-Valued Dependencies
CREATE TABLE Mitarbeiter_Kenntnisse_4NF_Problem (
    mitarbeiter_id INT,
    programmiersprache VARCHAR(50),
    projekt_id INT,
    PRIMARY KEY (mitarbeiter_id, programmiersprache, projekt_id)
);

-- MVDs: mitarbeiter_id →→ programmiersprache, mitarbeiter_id →→ projekt_id

-- 4NF-Lösung: Separation von MVDs
CREATE TABLE Mitarbeiter_Sprachen (
    mitarbeiter_id INT,
    programmiersprache VARCHAR(50),
    PRIMARY KEY (mitarbeiter_id, programmiersprache)
);

CREATE TABLE Mitarbeiter_Projekte (
    mitarbeiter_id INT,
    projekt_id INT,
    PRIMARY KEY (mitarbeiter_id, projekt_id)
);

5. Normalform (5NF)

-- Problem: Join Dependencies
CREATE TABLE Lieferanten_Produkte_Kunden_5NF_Problem (
    lieferant_id INT,
    produkt_id INT,
    kunden_id INT,
    PRIMARY KEY (lieferant_id, produkt_id, kunden_id)
);

-- JD: *(Lieferanten_Produkte, Produkte_Kunden, Lieferanten_Kunden)*

-- 5NF-Lösung: Dekomposition in Projectionen
CREATE TABLE Lieferanten_Produkte (
    lieferant_id INT,
    produkt_id INT,
    PRIMARY KEY (lieferant_id, produkt_id)
);

CREATE TABLE Produkte_Kunden (
    produkt_id INT,
    kunden_id INT,
    PRIMARY KEY (produkt_id, kunden_id)
);

CREATE TABLE Lieferanten_Kunden (
    lieferant_id INT,
    kunden_id INT,
    PRIMARY KEY (lieferant_id, kunden_id)
);

Normalisierungsprozess

Schritt 1: Identifikation von Abhängigkeiten

-- Analyse funktionaler Abhängigkeiten
-- Beispiel: Bestellungssystem
-- bestell_id → bestelldatum, kunden_id
-- kunden_id → kundenname, adresse
-- bestell_id, artikel_id → menge, einzelpreis
-- artikel_id → artikelname, lagerbestand

Schritt 2: Anwendung der Normalformen

-- 1NF: Atomare Werte sicherstellen
-- 2NF: Partielle Abhängigkeiten eliminieren
-- 3NF: Transitive Abhängigkeiten eliminieren
-- BCNF: Determinanten als Kandidatenschlüssel
-- 4NF: Multi-Valued Dependencies eliminieren
-- 5NF: Join Dependencies eliminieren

Schritt 3: Überprüfung

-- Test auf Anomalien
INSERT INTO ... -- Insert-Anomalien?
UPDATE ...     -- Update-Anomalien?
DELETE ...     -- Delete-Anomalien?

Vorteile und Nachteile

Vorteile der Normalisierung

  • Datenintegrität: Vermeidung von Redundanz und Inkonsistenzen
  • Wartbarkeit: Änderungen nur an einer Stelle erforderlich
  • Speichereffizienz: Reduzierung von Redundanz
  • Konsistenz: Einheitliche Datenrepräsentation
  • Skalierbarkeit: Bessere Performance bei großen Datenmengen

Nachteile

  • Performance: Mehr Joins erforderlich
  • Komplexität: Komplexere Datenstruktur
  • Schreibperformance: Verteilte Updates
  • Over-Engineering: Zu hohe Normalisierung kann kontraproduktiv sein

Denormalisierungstrategien

Gezielte Redundanz für Performance

-- Denormalisierte Version für Reporting
CREATE TABLE Bestellungen_Report (
    bestell_id INT PRIMARY KEY,
    bestelldatum DATE,
    kundenname VARCHAR(100), -- Redundant aus Kundentabelle
    artikelname VARCHAR(100), -- Redundant aus Artikeltabelle
    menge INT,
    gesamtpreis DECIMAL(10,2)
);

Häufige Prüfungsfragen

  1. Wann ist eine Tabelle in 3NF aber nicht in BCNF? Wenn eine Determinante kein Kandidatenschlüssel ist (Beispiel: Projektmitarbeiter mit Rollen).

  2. Was ist der Unterschied zwischen 3NF und BCNF? BCNF ist strenger: jede Determinante muss ein Kandidatenschlüssel sein.

  3. Erklären Sie Multi-Valued Dependencies! X →→ Y bedeutet, dass für jeden X-Wert die Menge der Y-Werte unabhängig von anderen Attributen ist.

  4. Wann sind höhere Normalformen (4NF, 5NF) praktisch relevant? Bei sehr komplexen Datenstrukturen mit vielen Beziehungen, meist in akademischen oder spezialisierten Systemen.

Wichtigste Quellen

  1. https://de.wikipedia.org/wiki/Normalisierung_(Datenbank)
  2. https://www.gatech.edu/coe/cse/database-normalization
  3. https://www.sql-tutorial.ru/sql-normalization-complete.html
Zurück zum Blog
Share:

Ähnliche Beiträge