Skip to content
IRC-Coding IRC-Coding
Normalisierung 1NF 2NF 3NF BCNF Datenbankdesign Funktionale Abhängigkeiten Anomalien

Datenbankdesign: Normalisierung 1NF, 2NF, 3NF & BCNF

Normalisierung eliminiert Redundanz und Anomalien. 1NF, 2NF, 3NF, BCNF mit funktionalen Abhängigkeiten, Primärschlüsseln und praktischen Beispielen.

S

schutzgeist

2 min read

Datenbankdesign: Normalisierung 1NF, 2NF, 3NF & BCNF

Dieser Beitrag ist eine Begriffserklärung zur Normalisierung in Datenbanken – inklusive praktischer Beispiele und Prüfungsfragen.

In a Nutshell

Normalisierung ist der Prozess der Strukturierung relationaler Datenbanken, um Redundanz zu eliminieren und Datenanomalien zu vermeiden. Ziel ist die Gewährleistung der Datenintegrität und -konsistenz.

Kompakte Fachbeschreibung

Normalisierung ist ein formaler Ansatz zur Eliminierung von Redundanz und Vermeidung von Anomalien in relationalen Datenbanken. Durch schrittweise Anwendung von Normalformen wird die Datenstruktur verbessert.

Anomalien ohne Normalisierung:

  • Insert-Anomalien: Daten können nicht eingefügt werden ohne andere Informationen
  • Update-Anomalien: Änderungen erfordern Updates an mehreren Stellen
  • Delete-Anomalien: Löschen von Daten entfernt unbeabsichtigt andere Informationen

Normalformen:

  • 1NF: Atomare Werte, keine Wiederholungsgruppen
  • 2NF: 1NF + keine partiellen Abhängigkeiten
  • 3NF: 2NF + keine transitiven Abhängigkeiten
  • BCNF: Stärkere Form der 3NF mit strengeren Regeln

Funktionale Abhängigkeiten bilden die mathematische Grundlage: X → Y bedeutet, dass der Wert von X den Wert von Y eindeutig bestimmt.

Prüfungsrelevante Stichpunkte

  • 1NF: Atomare Werte, keine Wiederholungsgruppen, eindeutige Primärschlüssel
  • 2NF: 1NF erfüllt, keine partiellen Abhängigkeiten, vollständige Abhängigkeit vom Primärschlüssel
  • 3NF: 2NF erfüllt, keine transitiven Abhängigkeiten, Nicht-Schlüssel hängen nur vom Primärschlüssel ab
  • BCNF: Jede Determinante ist ein Kandidatenschlüssel
  • Funktionale Abhängigkeiten: Mathematische Grundlage der Normalisierung
  • Anomalien: Insert, Update, Delete Probleme bei denormalisierten Daten
  • IHK-relevant: Wichtig für Datenmodellierung und Datenbankdesign
  • Praxis: Trade-off zwischen Normalisierung und Performance

Kernkomponenten

  1. Funktionale Abhängigkeit: X → Y (X bestimmt Y eindeutig)
  2. Primärschlüssel: Eindeutige Identifikation von Datensätzen
  3. Kandidatenschlüssel: Mögliche Primärschlüssel
  4. Partielle Abhängigkeit: Abhängigkeit von einem Teil des zusammengesetzten Schlüssels
  5. Transitive Abhängigkeit: Indirekte Abhängigkeit über Nicht-Schlüssel-Attribute
  6. Determinante: Attribut, das andere Attribute bestimmt
  7. Normalisierungsprozess: Schrittweise Anwendung der Normalformen
  8. Denormalisierung: Gezielte Redundanz für Performance-Optimierung

Praxisbeispiele

Unnormalisierte Tabelle (0NF)

-- Problematische Struktur mit Redundanz und Anomalien
CREATE TABLE Bestellungen (
    bestell_nr INT,
    bestellDatum DATE,
    kundenName VARCHAR(100),
    kundenAdresse VARCHAR(200),
    artikel_nr INT,
    artikelName VARCHAR(100),
    preis DECIMAL(10,2),
    menge INT,
    gesamtpreis DECIMAL(10,2)
);

-- Daten mit Problemen
INSERT INTO Bestellungen VALUES 
(1, '2024-01-15', 'Meier', 'Hauptstraße 1', 101, 'Laptop', 999.99, 2, 1999.98),
(1, '2024-01-15', 'Meier', 'Hauptstraße 1', 102, 'Maus', 29.99, 1, 29.99),
(2, '2024-01-16', 'Schmidt', 'Nebenstraße 2', 101, 'Laptop', 999.99, 1, 999.99);

1. Normalform (1NF)

-- Atomare Werte, keine Wiederholungsgruppen
CREATE TABLE Bestellungen_1NF (
    bestell_nr INT,
    bestellDatum DATE,
    kundenName VARCHAR(100),
    kundenAdresse VARCHAR(200),
    artikel_nr INT,
    artikelName VARCHAR(100),
    preis DECIMAL(10,2),
    menge INT,
    gesamtpreis DECIMAL(10,2),
    PRIMARY KEY (bestell_nr, artikel_nr)
);

-- Funktionale Abhängigkeiten:
-- bestell_nr, artikel_nr → menge, gesamtpreis
-- bestell_nr → bestellDatum, kundenName, kundenAdresse
-- artikel_nr → artikelName, preis

2. Normalform (2NF)

-- Eliminierung partieller Abhängigkeiten
CREATE TABLE Bestellungen_2NF (
    bestell_nr INT PRIMARY KEY,
    bestellDatum DATE,
    kundenName VARCHAR(100),
    kundenAdresse VARCHAR(200)
);

CREATE TABLE Bestellpositionen (
    bestell_nr INT,
    artikel_nr INT,
    menge INT,
    gesamtpreis DECIMAL(10,2),
    PRIMARY KEY (bestell_nr, artikel_nr),
    FOREIGN KEY (bestell_nr) REFERENCES Bestellungen_2NF(bestell_nr)
);

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

3. Normalform (3NF)

-- Eliminierung transitiver Abhängigkeiten
CREATE TABLE Bestellungen_3NF (
    bestell_nr INT PRIMARY KEY,
    bestellDatum DATE,
    kunden_id INT,
    FOREIGN KEY (kunden_id) REFERENCES Kunden(kunden_id)
);

CREATE TABLE Kunden (
    kunden_id INT PRIMARY KEY,
    kundenName VARCHAR(100),
    kundenAdresse VARCHAR(200)
);

CREATE TABLE Bestellpositionen (
    bestell_nr INT,
    artikel_nr INT,
    menge INT,
    PRIMARY KEY (bestell_nr, artikel_nr),
    FOREIGN KEY (bestell_nr) REFERENCES Bestellungen_3NF(bestell_nr),
    FOREIGN KEY (artikel_nr) REFERENCES Artikel(artikel_nr)
);

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

Anomalien und ihre Lösungen

Insert-Anomalie (ohne Normalisierung)

-- Problem: Kunde kann ohne Bestellung nicht angelegt werden
-- Lösung: Separate Kundentabelle
INSERT INTO Kunden (kunden_id, kundenName, kundenAdresse) 
VALUES (3, 'Mueller', 'Dritter Weg 3');

Update-Anomalie (ohne Normalisierung)

-- Problem: Kundenadresse muss an mehreren Stellen geändert werden
-- Lösung: Zentrale Kundentabelle
UPDATE Kunden 
SET kundenAdresse = 'Hauptstraße 1a' 
WHERE kunden_id = 1;

Delete-Anomalie (ohne Normalisierung)

-- Problem: Löschen der letzten Bestellung entfernt Kundendaten
-- Lösung: Separate Tabellen vermeiden unbeabsichtigtes Löschen
DELETE FROM Bestellpositionen WHERE bestell_nr = 1;
-- Kundendaten bleiben in Kundentabelle erhalten

BCNF (Boyce-Codd Normalform)

BCNF-Regel

Jede Determinante muss ein Kandidatenschlüssel sein.

-- Beispiel das 3NF aber nicht BCNF erfüllt
CREATE TABLE Projektmitarbeiter (
    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 ist kein Kandidatenschlüssel!)

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

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

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

Nachteile

  • Performance: Mehr Joins erforderlich
  • Komplexität: Komplexere Datenstruktur
  • Schreibperformance: Verteilte Updates auf mehrere Tabellen
  • Lernkurve: Erfordert Verständnis funktionaler Abhängigkeiten

Häufige Prüfungsfragen

  1. Was ist der Unterschied zwischen 2NF und 3NF? 2NF eliminiert partielle Abhängigkeiten, 3NF eliminiert transitive Abhängigkeiten.

  2. Wann ist eine Tabelle in BCNF? Wenn jede Determinante ein Kandidatenschlüssel ist (strenger als 3NF).

  3. Erklären Sie funktionale Abhängigkeiten! X → Y bedeutet, dass der Wert von X den Wert von Y eindeutig bestimmt.

  4. Was sind Anomalien und wie werden sie vermieden? Insert, Update, Delete Anomalien werden durch Normalisierung vermieden.

Wichtigste Quellen

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

Ähnliche Beiträge