hwr-notes/Datenbanken/Zusammenfassungen/e_NFs - zusammenfassung.md
2026-04-09 11:24:56 +02:00

16 KiB
Raw Permalink Blame History

Normalisierung Zusammenfassung

Dozent: A. Zimmermann | HWR Berlin | 2026 | Folien 141


1. Einführung (Folien 16)

Was ist Normalisierung?

Die relationale Darstellung einer entworfenen Datenbank kann noch verfeinert werden. Die Basis dafür bilden die Normalformen der Tabellen.

Normalisierung = Aufteilung von Attributen in mehrere Relationen (Tabellen) mithilfe der Normalisierungsregeln, sodass eine Struktur entsteht, die keine vermeidbaren Redundanzen mehr enthält.

Ziele der Normalisierung

Ziel Beschreibung
Redundanzbeseitigung Nur notwendige Redundanz bleibt erhalten
Anomalienvermeidung Funktionelle und transitive Abhängigkeiten werden aufgelöst
Klare Struktur Erstellung eines klar strukturierten Datenbankmodells

Praktische Bedeutung

  • Praktisch wichtig sind nur die ersten drei Normalformen (1NF, 2NF, 3NF)
  • Manchmal ist es sinnvoll, auf Normalformen aus Performancegründen zu verzichten (z. B. lange Laufzeiten, große Anzahl der Tabellen)
  • Jede nächste Normalform basiert auf der vorigen

Funktionale Abhängigkeit (Folie 4)

Definition: Man betrachtet eine Relation, X und Y sind Mengen der Attribute. Y ist von X funktional abhängig (X → Y), wenn für alle Tupel t1 und t2 gilt:

Wenn t1 ∩ X = t2 ∩ X, dann gilt auch t1 ∩ Y = t2 ∩ Y
  • Y hängt von X ab, wenn X die Werte von Y eindeutig bestimmt
  • X bestimmt alle anderen Attribute → X ist ein Superschlüssel
  • Ist X auch minimal, dann ist X ein Kandidat für Primärschlüssel

Arten der Abhängigkeit (Folie 5)

Art Notation Beschreibung
Funktionale Abhängigkeit X → Y X bestimmt Y eindeutig
Mehrwertige Abhängigkeit (multivalued) X →→ Y X bestimmt eine Menge von Y-Werten

Überblick Normalformen (Folie 6)

Die Normalformen bilden eine aufsteigende Kette: 1NF → 2NF → 3NF → BCNF → 4NF → 5NF


2. Erste Normalform 1NF (Folien 716)

Definition (Folie 8)

Eine Tabelle liegt in 1NF vor, wenn ihre Zellen nur atomare Werte beinhalten, d. h. sie enthalten nicht mehr als einen Wert (keine Auflistungen).

"Atomar" bedeutet: Die Werte können nicht weiter in kleinere Komponenten zerlegt werden, die einzeln einen Sinn im Anwendungsbereich ergeben.

Regeln der 1NF

  • Wiederholungsgruppen werden vermieden, indem jede Gruppe in eine separate Tabelle eingefügt und durch eine 1:N-Beziehung verbunden wird
  • Ob ein Attribut atomar ist, hängt stark von der Mini-Welt ab
  • Laut E. F. Codd müssen Tabellen in 1NF nicht unbedingt einen Primärschlüssel haben dieser ist erst für weitere Normalformen nötig

Mini-Welt-Beispiele: Adresse (Folien 910)

Mini-Welt Kontext Atomar?
Logistik-Firma (Müll-Abfuhr) PLZ, Straße, Hausnummer werden einzeln für Routenberechnung benötigt PLZ, Straße, Hausnummer sind jeweils atomar
Buchhaltung (Gehaltsabrechnung) Nur die gesamte Adresse wird für Briefversand benötigt Gesamte Adresse ist als Ganzes atomar

Beispiel: Bahnwagen (Folien 1213)

Ausgangstabelle (nicht in 1NF):

Wagen = { [ WagenID, Beschreibung, Status, Ankunft, Station ] }
PK = [WagenID, Ankunft]

Problem: Feld "Beschreibung" enthält: 'Wagentyp, Leergewicht, Kapazität, Hersteller, Baujahr'nicht atomar

In 1NF gebracht:

W1 = { [ WagenID, Status, Ankunft, Station, WagenType,
         Leergewicht, Kapazitaet, Hersteller, Baujahr ] }

Beispiel: Vertragsdaten (Folien 1416)

Ausgangstabelle (nicht in 1NF):

Vertragsdatum Kunde Produkt
01.02.2010 Kohl VW 30.000, BMW 40.000, Opel 40.000
03.01.2012 Schröder VW 32.000, Mercedes 35.000

In 1NF gebracht Produkt und Preis werden getrennt, jede Kombination ist eine eigene Zeile:

Vertragsdatum Kunde Produkt Preis
01.02.2010 Kohl VW 30.000
01.02.2010 Kohl BMW 40.000
01.02.2010 Kohl Opel 40.000
03.01.2012 Schröder VW 32.000
03.01.2012 Schröder Mercedes 35.000

Erweitertes Beispiel (Folie 1516): Tabelle mit Produkt+Herkunftsland und Menge+V.art als nicht-atomare Felder → Zerlegung in 7 separate Spalten (Vertragsdatum, Kunde, Produkt, Herkunftsland, V-Art, Lieferadresse, Menge). In 1NF ist hier kein PK nötig.


3. Zweite Normalform 2NF (Folien 1724)

Definition (Folie 17)

Eine Tabelle liegt in 2NF vor, wenn sie:

  1. In 1NF vorliegt
  2. Jedes Feld, das nicht zum Primärschlüssel gehört, vom ganzen Primärschlüssel abhängt

Regel: Besteht der Primärschlüssel nur aus einem Feld, liegt die Tabelle automatisch in 2NF vor.

Vorgang (Folie 18)

Felder, die nur vom Teil des Primärschlüssels abhängig sind, werden zusammen mit dem Teilschlüssel in neue Tabellen ausgelagert:

Vorher:  PK = [S1, S2] → alle Felder
Nachher: Tabelle 1: PK = [S1, S2] → Felder die vom ganzen PK abhängen
         Tabelle 2: PK = [S2]     → Felder die nur von S2 abhängen (DepS2)

Beispiel: Bahnwagen (Folie 19)

Die Felder [WagenType], [Leergewicht], [Kapazitaet], [Hersteller], [Baujahr] hängen nur von [WagenID] ab, aber nicht von [Ankunft] → nicht in 2NF.

Aufteilung in 2NF:

W11 = { [ WagenID, Ankunft, Status, Station ] }         ← PK = [WagenID, Ankunft]
W12 = { [ WagenID, WagenType, Leergewicht, Kapazitaet,
          Hersteller, Baujahr ] }                         ← PK = [WagenID]

Beispiel: Vertragsdaten (Folien 2022)

PK festgelegt: [Vertragsdatum, Kunde, Produkt]

Analyse der Abhängigkeiten:

  • [Herkunftsland] hängt nur von [Produkt] ab → verletzt 2NF
  • [Lieferadresse] hängt nur von [Kunde] ab → verletzt 2NF
  • [V-Art] hängt nur von [Produkt] ab → verletzt 2NF

Aufteilung:

T-1 = { [ Vertragsdatum, Kunde, Produkt, Herkunftsland, Menge ] }
T-2 = { [ Produkt, Herkunftsland ] }          ← falls V-Art unabhängig
T-3 = { [ Kunde, Lieferadresse ] }

Wenn [V-Art] nur von [Produkt] abhängig ist, wird T-2 weiter aufgeteilt:

T-3-1 = { [ Produkt, Herkunftsland ] }
T-3-2 = { [ Produkt, V-Art ] }

Beispiel: Bestellungen (Folie 23)

RNr ArtNr LagerOrt Anzahl
100100 1010 22 1
100100 1020 15 2
100103 1040 13 10

Bei ArtNr : LagerOrt = 1:1 gibt es zwei Schlüsselkandidaten: [RNr, ArtNr] und [RNr, LagerOrt]. Die 2NF ist in beiden Fällen verletzt, da [LagerOrt] vom Teilschlüssel [ArtNr] abhängt (bzw. umgekehrt).

Lösung:

Tabelle 1 = { [ RNr, ArtNr, Anzahl ] }
Tabelle 2 = { [ ArtNr, LagerOrt ] }

ERM-Bezug (Folie 24)

Wenn man vom ERM ausgeht und den konzeptuellen Entwurf korrekt in den logischen umwandelt, kommt man direkt zu Tabellen, die die 2NF nicht verletzen die Normalisierung ist dann nicht nötig.


4. Dritte Normalform 3NF (Folien 2528)

Definition (Folie 25)

Eine Tabelle liegt in 3NF vor, wenn sie:

  1. In 2NF vorliegt
  2. Alle Felder, die nicht zum Primärschlüssel gehören, voneinander unabhängig sind

Regel: Wenn nur ein Nichtschlüsselfeld in der Tabelle vorhanden ist, liegt die Tabelle automatisch in 3NF vor.

Wichtig: In der Praxis ist die 3NF oft ausreichend, um eine perfekte Balance aus Redundanz, Performance und Flexibilität zu gewährleisten. Es gibt Sonderfälle (z. B. wissenschaftlicher Bereich), wo weiter normalisiert werden muss.

Vorgang (Folie 26)

Funktionale Abhängigkeiten unter Nicht-PK-Feldern werden durch Aufteilung der Tabelle aufgelöst:

Vorher:  PK = [S1, S2], Feld F hängt von DepF ab (beide Nicht-PK)
Nachher: Tabelle 1: [S1, S2, F]      ← F bleibt als FK
         Tabelle 2: [F, DepF]         ← F wird PK der neuen Tabelle

Beispiel: Bahnwagen (Folie 27)

Aus der 2NF: W12 = { [ WagenID, WagenType, Leergewicht, Kapazitaet, Hersteller, Baujahr ] }

[Leergewicht], [Kapazitaet], [Hersteller] und ggf. [Baujahr] sind vom Feld [WagenType] abhängig → nicht in 3NF.

Variante a (Baujahr ist vom WagenType abhängig):

W121a = { [ WagenID, WagenType ] }
W122a = { [ WagenType, Leergewicht, Kapazitaet, Hersteller, Baujahr ] }

Variante b (Baujahr ist vom WagenType unabhängig):

W121b = { [ WagenID, WagenType, Baujahr ] }
W122b = { [ WagenType, Leergewicht, Kapazitaet, Hersteller ] }

Beispiel: Kunden (Folie 28)

Ausgangstabelle: { [ KundenID, Adresse, Telefon ] }

Wenn Adresse und Telefon voneinander unabhängig sind (nur vom PK KundenID abhängig), ist die Tabelle bereits in 3NF. Falls nicht → Aufteilung:

Tabelle 1 = { [ KundenID, Adresse ] }
Tabelle 2 = { [ KundenID, Telefon ] }

5. Boyce-Codd-Normalform BCNF (Folien 2930)

Definition (Folie 29)

Eine Tabelle liegt in BCNF vor, wenn sie:

  1. In 3NF vorliegt
  2. Kein Teil eines Schlüsselkandidaten funktional von keinem Teil eines anderen Schlüsselkandidaten abhängig ist

Kern: BCNF behandelt die Abhängigkeiten zwischen Teilen mehrerer Schlüsselkandidaten, falls diese sich teilweise überlappen.

Regel: Gibt es nur einen Schlüsselkandidaten oder liegt keine Überlappung vor, befindet sich die Tabelle automatisch in BCNF.

Beispiel: Sportvereine (Folie 30)

Name Sportart Verein
Schulz Fußball FC Berlin
Mayer Fußball FC Berlin
Zimmermann Fußball FC Marzahn
Mayer Volleyball VC Hamburg

Beziehung: Sportart : Verein = 1 : N (ein Verein betreibt nur eine Sportart, aber zu einer Sportart gehören mehrere Vereine)

Schlüsselkandidaten: [Name, Sportart] und [Name, Verein] → Überlappung (Name)

Problem: [Sportart] hängt vom Nicht-Schlüssel-Feld [Verein] ab → verletzt BCNF

Lösung:

Tabelle 1 = { [ Name, Verein ] }
Tabelle 2 = { [ Sportart, Verein ] }

6. Vierte Normalform 4NF (Folie 31)

Definition

Eine Tabelle liegt in 4NF vor, wenn sie:

  1. In BCNF vorliegt
  2. Nur semantisch verbundene Nichtschlüsselattribute sich in der Tabelle befinden

Die 4NF trennt semantisch (thematisch, inhaltlich) unabhängige Entitäten durch Aufteilung der Tabelle.

Beispiel: Bahnwagen

Aus der 3NF: W122a = { [ WagenType, Leergewicht, Kapazitaet, Hersteller, Baujahr ] }

[Leergewicht] und [Kapazitaet] werden viel öfter verwendet als [Hersteller] und [Baujahr] (historische Bedeutung) → unterschiedliche Semantik → werden nie gleichzeitig benötigt.

Aufteilung in 4NF:

W122a1 = { [ WagenType, Leergewicht, Kapazitaet ] }    ← technische Daten
W122a2 = { [ WagenType, Hersteller, Baujahr ] }         ← historische Daten

7. Fünfte Normalform 5NF (Folien 3234)

Definition (Folie 32)

Eine Tabelle liegt in 5NF vor, wenn sie:

  1. In 4NF vorliegt
  2. Nicht mehr in Tabellen eines geringeren Grades zerlegt werden kann

Kern: Die neuen Tabellen können jederzeit den ursprünglichen Zustand ohne Informationsverlust wieder herstellen (durch JOIN).

Nachteil: Man braucht in der Praxis ständig die ganzen Informationen und muss daher ständig die vereinfachten Tabellen wieder vereinigen (JOIN).

Beispiel 1: Touristik-Firma (Folie 33)

T10 = { [ PersID, TourNr, Trans-Unternehmen ] }    ← PK = alle drei Attribute

Keine mehrwertigen Abhängigkeiten, da die drei Felder zusammen eine informative Einheit bilden. Trotzdem zerlegbar in:

T11 = { [ PersID, TourNr ] }
T12 = { [ PersID, Trans-Unternehmen ] }
T13 = { [ TourNr, Trans-Unternehmen ] }

Diese drei Tabellen können durch JOIN wieder die Originaltabelle herstellen.

Beispiel 2: Hersteller-Produkt-Person (Folie 34)

HerstID ProduktID PersID
1 Stift 006
1 Ordner-L 007
1 Kopierpapier 007
2 Ordner-Z 006
3 Kopierpapier 007

Zerlegung in 5NF:

TA = { [ HerstID, ProduktID ] }
TB = { [ PersID, ProduktID ] }
TC = { [ HerstID, PersID ] }

8. Bedeutung des ERM (Folien 3541)

ERM als Alternative zur Normalisierung (Folie 35)

  • Für die Praxis ist es empfehlenswert, dass Tabellen sich in 3NF befinden
  • Höhere Normalformen sind eher für theoretische Untersuchungen wichtig
  • In der Praxis gelten Richtlinien (z. B. Geschwindigkeit), die manchmal den Verzicht auf 3NF (sogar 2NF) erfordern

Wichtige Erkenntnis: Wenn man vom ERM ausgeht und den konzeptuellen Entwurf korrekt in den logischen umwandelt (inkl. Vereinfachung), bekommt man ziemlich wahrscheinlich Tabellen in 3NF.

Anomalien ohne Normalisierung (Folien 3638)

Beispiel: Eine Tabelle mit Mitarbeitern, Abteilungen und Projekten (nicht normalisiert):

PersID Name AbtNr Abteilung ProjNr ProjBeschreibung
1 Anna 42 Second Level BE Bergland ...
1 Anna 42 Second Level NO Nordsee ...
2 Arnold 42 Second Level NO Nordsee ...
2 Arnold 42 Second Level OG Ostgipfel ...
3 Betty 53 First Dept OG Ostgipfel ...
3 Betty 53 First Dept WO West-Ozean ...
4 Chris 53 First Dept WO West-Ozean ...

Probleme (Anomalien):

Anomalie Problem
Einfüge-Anomalie Neuer Mitarbeiter mit mehreren Projekten → mehrere Zeilen, Vertippen möglich
Änderungs-Anomalie Projektumbenennung → mehrere Zeilen ändern, Übersehen möglich
Lösch-Anomalie Mitarbeiter löschen → mehrere Zeilen entfernen, Übersehen möglich

Normalisierung → 3NF (Folie 39)

Ergebnis der Normalisierung:

Mitarbeiter   = { [ PersID, Name, AbtNr ] }
Abteilung     = { [ AbtNr, Abteilung ] }
arbeitet_an   = { [ PersID, ProjNr ] }
Projekt       = { [ ProjNr, ProjBeschreibung ] }

ERM-Ansatz liefert dasselbe Ergebnis (Folie 40)

Wenn man mit dem ERM anfängt (konzeptuellen Entwurf richtig durchführt):

Abteilung (1) — gehört zu — (N) Mitarbeiter (M) — arbeitet an — (N) Projekt

Die Überführung in die relationale Darstellung liefert dieselben Tabellen wie die Normalisierung → ERM und Normalisierung sind komplementäre Ansätze zum gleichen Ziel.


Zusammenfassung

Normalform Voraussetzung Regel Automatisch erfüllt wenn...
1NF Nur atomare Werte in Zellen Keine Auflistungen vorhanden
2NF 1NF Jedes Nicht-PK-Feld hängt vom ganzen PK ab PK besteht aus nur einem Feld
3NF 2NF Nicht-PK-Felder sind voneinander unabhängig Nur ein Nicht-PK-Feld vorhanden
BCNF 3NF Keine Abhängigkeiten zwischen Teilen verschiedener Schlüsselkandidaten Nur ein Schlüsselkandidat oder keine Überlappung
4NF BCNF Nur semantisch verbundene Nicht-PK-Attribute zusammen Alle Attribute thematisch zusammengehörig
5NF 4NF Nicht weiter in Tabellen geringeren Grades zerlegbar Zerlegung würde Informationsverlust verursachen

Durchgängiges Beispiel: Bahnwagen

Ausgangstabelle:  { [ WagenID, Beschreibung, Status, Ankunft, Station ] }
→ 1NF:  W1   = { [ WagenID, Status, Ankunft, Station, WagenType, Leergewicht, Kapazitaet, Hersteller, Baujahr ] }
→ 2NF:  W11  = { [ WagenID, Ankunft, Status, Station ] }
        W12  = { [ WagenID, WagenType, Leergewicht, Kapazitaet, Hersteller, Baujahr ] }
→ 3NF:  W11  = { [ WagenID, Ankunft, Status, Station ] }
        W121 = { [ WagenID, WagenType ] }
        W122 = { [ WagenType, Leergewicht, Kapazitaet, Hersteller, Baujahr ] }
→ 4NF:  W122a1 = { [ WagenType, Leergewicht, Kapazitaet ] }
        W122a2 = { [ WagenType, Hersteller, Baujahr ] }