Zum Hauptinhalt springen
Normalisierung1NF2NF3NFAnomalienFunktionale AbhängigkeitSchlüssel

Funktionale Abhängigkeiten und Normalisierung

Nach der Überführung eines ER-Modells in Relationen stellt sich die Frage: Sind diese Relationen gut strukturiert? Speichern sie Daten redundant? Drohen beim Ändern, Einfügen oder Löschen Inkonsistenzen?

Dieser Abschnitt führt drei aufeinander aufbauende Konzepte ein: Anomalien als Probleme schlecht strukturierter Datenbanken, funktionale Abhängigkeiten als formales Werkzeug zur Analyse, und Normalisierung als systematisches Verfahren zur Optimierung.

Anomalien

Bevor die Normalisierung formal eingeführt wird, lohnt ein Blick auf die konkreten Probleme, die in unzureichend strukturierten Relationen entstehen. Diese Probleme heißen Anomalien und entspringen alle derselben Ursache: Redundanz — also dieselbe Information, mehrfach gespeichert.

Folgende, bewusst schlecht entworfene Relation einer Schulbibliothek dient als Ausgangspunkt. Schnell fällt auf: Buchdaten (Titel, Autor, Standort) und Schülerdaten (Name, Klasse) tauchen mehrfach auf. Genau diese Vermischung verursacht die drei klassischen Anomalien.

Untersuche in der interaktiven Demo die drei verschiedenen Anomalien:

Das Buch „1984" soll in einen anderen Raum (205) aufbewahrt werden. Was passiert, wenn nicht alle betroffenen Zeilen synchron geändert werden.

Bibliothek_schlecht
BuchIDTitelAutorStandortSchuelerIDSchuelerNameKlasse
B0011984OrwellRaum 203S123Anna Schmidt10a
B0011984OrwellRaum 203S456Max Müller10b
B002Harry PotterRowlingRaum 204S123Anna Schmidt10a
B003Der ProzessKafkaRaum 203NULLNULLNULL
Wähle aus, wie viele Zeilen geändert werden:
Hinweis: Das Buch B001 kommt in zwei Zeilen vor — die Information „Standort" ist redundant gespeichert.
verantwortliche FABuchID → Titel, Autor, Standort — die Buchdaten hängen allein von BuchID ab, also nur von einem Teil des Schlüssels {BuchID, SchuelerID}.

Update-Anomalie

Wird das Buch 1984 von Raum 203 nach Raum 205 verlegt, müssen alle Zeilen mit B001 geändert werden. Wird auch nur eine vergessen, steht das Buch laut Datenbank gleichzeitig in zwei Räumen — ein Widerspruch, den die Datenbank selbst nicht auflösen kann.

Update-Anomalie: dieselbe Information mehrfach gespeichert — bei einer Änderung müssen alle Kopien synchron aktualisiert werden.

Einfüge-Anomalie

Ein neues Buch Faust (B004) soll in die Bibliothek aufgenommen werden, ist aber noch nicht ausgeliehen. Die Tabellenstruktur erzwingt jedoch Werte für SchuelerID, SchuelerName und Klasse. Drei Auswege bleiben — keiner überzeugt:

  • NULL-Werte (verfälschen Auswertungen),
  • Dummy-Werte (verfälschen die Daten),
  • gar kein Eintrag (die Bibliothek "kennt" das Buch nicht).

Einfüge-Anomalie: Daten lassen sich nicht speichern, weil dafür künstlich abhängige Werte erfunden werden müssten.

Lösch-Anomalie

Gibt Max Müller (S456) sein einziges ausgeliehenes Buch zurück und wird die zugehörige Zeile gelöscht, verschwindet mit der Ausleihinformation auch Max Müller selbst: Die Schule weiß nicht mehr, dass er existiert oder in welche Klasse er geht.

Lösch-Anomalie: Beim Löschen verschwinden unbeabsichtigt unabhängige Informationen mit.

Gemeinsame Ursache

AnomalieSymptom
UpdateInkonsistenzen bei Änderungen
EinfügenNeue Daten nicht ohne Krücken speicherbar
LöschenUnbeabsichtigter Verlust unabhängiger Daten

Alle drei Anomalien wurzeln in Redundanz: Derselbe Wert muss sich wiederholen — und er wiederholt sich genau dann, wenn er von etwas bestimmt wird, das nicht der Schlüssel der Tabelle ist. Konkret hängen in der Bibliothekstabelle Titel, Autor und Standort allein von BuchID ab, während SchuelerName und Klasse allein von SchuelerID abhängen — keines davon vom vollständigen Schlüssel {BuchID, SchuelerID}. Deshalb werden die Buchdaten für jede Ausleihe erneut gespeichert (Update-Anomalie), können ohne Ausleihe gar nicht erst existieren (Einfüge-Anomalie) und verschwinden mit der letzten Ausleihe (Lösch-Anomalie).

Solche Beziehungen „X bestimmt Y" heißen funktionale Abhängigkeiten — das systematische Werkzeug, um Redundanz aufzuspüren. Und um zu beurteilen, ob eine solche Abhängigkeit „am Schlüssel hängt" oder eben nicht, brauchen wir zusätzlich einen präzisen Schlüsselbegriff. Beide führen die nächsten Abschnitte ein.

Training — Anomalien erkennen

Gegeben sei folgendes nicht-normalisiertes Relationenschema:

Bestellung(Kunden_ID, Kunde_Name, Kunde_Adresse, Artikel_Name, Artikel_Preis, Lieferant, Lieferant_Telefon, Menge, Datum)

  1. Erkläre an einem eigenen Beispiel, wie eine Update-Anomalie entstehen kann.
  2. Beschreibe eine Situation, in der eine Einfüge-Anomalie das Speichern wichtiger Informationen verhindert.
  3. Konstruiere einen Fall, in dem das Löschen eines einzelnen Tupels zu einer Lösch-Anomalie führt.

Funktionale Abhängigkeiten (FA)

Definition

Sei eine Relation mit Attributmenge , und seien Attributteilmengen. Eine funktionale Abhängigkeit liegt vor, wenn für alle Tupel in gilt:

In Worten: Stimmen zwei Tupel in den Werten von überein, dann zwangsläufig auch in den Werten von . Die Werte von legen die von eindeutig fest.

Einzelne und zusammengesetzte Determinanten

Oft bestimmt schon ein einzelnes Attribut weitere Werte (einfache Determinante):

Schüler(SchuelerID, Name, Geburtsdatum, Klasse, Klassenlehrer)

mit den Abhängigkeiten

  • KlasseKlassenlehrer
  • SchuelerIDName, Geburtsdatum, Klasse
Schüler
SchuelerIDNameGeburtsdatumKlasseKlassenlehrer
S001Anna Schmidt2008-04-1210aFrau Meyer
S002Max Müller2008-09-0310aFrau Meyer
S003Lisa Weber2007-11-2110bHerr Schmidt
S004Tom Koch2008-02-0810bHerr Schmidt

Konkret in der Tabelle ablesbar: Die Zeilen S001 und S002 stimmen in Klasse überein (beide 10a) und tragen folglich denselben Klassenlehrer (Frau Meyer). Genauso bei S003 und S004: gleiche Klasse 10b, gleicher Klassenlehrer Herr Schmidt. Das ist KlasseKlassenlehrer.

In anderen Fällen genügt ein einzelnes Attribut nicht — erst die Kombination mehrerer Attribute bestimmt einen Wert eindeutig (zusammengesetzte Determinante):

Prüfung(SchuelerID, FachID, Datum, Note, Punktzahl)

Prüfung
SchuelerIDFachIDDatumNotePunktzahl
S001MAT2024-03-151.713
S001MAT2024-06-202.311
S001DEU2024-03-152.012
S002MAT2024-03-152.79

In der Tabelle lassen sich alle „kleineren" Determinanten ausschließen. Zum Beispiel:

  • SchuelerID allein reicht nicht — Anna (S001) hat drei verschiedene Noten.
  • FachID allein reicht nicht — in MAT stehen drei unterschiedliche Noten (1.7, 2.3, 2.7).
  • ...

Erst die volle Kombination {SchuelerID, FachID, Datum}Note bestimmt die Note eindeutig.

Schlüssel

Ob eine funktionale Abhängigkeit zu Redundanz führt, entscheidet sich daran, ob ihre Determinante ein Schlüssel der Relation ist — der Begriff ist daher der Maßstab für alles Folgende. Ein Schlüssel ist eine Attributmenge, deren Werte jedes Tupel eindeutig identifizieren: keine zwei Tupel stimmen in ihnen überein. Genauer unterscheidet man drei zusammenspielende Begriffe:

  • Superschlüssel: eine Attributmenge , die alle Attribute des Schemas funktional bestimmt () — kein zweites Tupel hat dieselben Werte in . Darf „zu groß" sein, also überflüssige Attribute enthalten.
  • Kandidatenschlüssel: ein minimaler Superschlüssel — keine echte Teilmenge ist noch Superschlüssel. Eine Relation kann mehrere haben.
  • Primärschlüssel: einer der Kandidatenschlüssel, vom Modellierer als Hauptschlüssel ausgewählt (mit Unterstreichung markiert).

Daraus folgt die für die Normalformen entscheidende Unterscheidung:

  • Ein Schlüsselattribut kommt in mindestens einem Kandidatenschlüssel vor.
  • Alle übrigen heißen Nichtschlüsselattribute.

Diese Begriffe lassen sich an einem Schema mit mehreren Kandidatenschlüsseln am besten nachvollziehen.

Schlüssel-Demo

Gegeben sei das Schema

Schüler(SchuelerID, Ausweisnummer, Vorname, Nachname, Geburtsdatum, Klasse)

mit der Annahme, dass {SchuelerID}, {Ausweisnummer} und {Vorname, Nachname, Geburtsdatum} jeweils einen Schüler eindeutig identifizieren. Klicke in der Demo auf die Spaltennamen und beobachte, welche Auswahl zu einem Kandidatenschlüssel, einem Superschlüssel oder zu keinem Schlüssel führt:

Klicke Spalten an, um eine Attributmenge X auszuwählen. Die Komponente prüft, ob X ein Kandidatenschlüssel, ein Superschlüssel (nicht minimal) oder kein Schlüssel ist.
SchuelerIDAusweisnummerVornameNachnameGeburtsdatumKlasse
S001AW-4711AnnaSchmidt12.04.200810a
S002AW-3892MaxMüller03.09.200810a
S003AW-5501LisaWeber21.11.200710b
S004AW-2284AnnaBecker12.04.200810a
S005AW-7720TimSchmidt21.11.200710b
S006AW-8821AnnaSchmidt21.11.200710b

Wähle mindestens eine Spalte aus, um die Klassifikation zu sehen.

Hinweis: Minimalität gilt je Kandidatenschlüssel

Mehrere Kandidatenschlüssel können unterschiedlich groß sein. Hier existieren z. B. {SchuelerID} (ein Attribut) und gleichzeitig {Vorname, Nachname, Geburtsdatum} (drei Attribute). „Minimal" heißt nicht möglichst klein im Vergleich zu anderen Schlüsseln, sondern in sich minimal: keine echte Teilmenge dieses Schlüssels ist selbst noch Superschlüssel. Es gibt also nicht den kleinsten Kandidatenschlüssel — verschieden große Kandidatenschlüssel können nebeneinander existieren.

Kurz zusammengefasst:

  • Es gibt drei Kandidatenschlüssel: {SchuelerID}, {Ausweisnummer} und {Vorname, Nachname, Geburtsdatum} — jeweils in sich minimal, dürfen aber durchaus unterschiedlich groß sein.
  • Jede Obermenge eines Kandidatenschlüssels ist ein Superschlüssel, z. B. {SchuelerID, Klasse}. Die zusätzlichen Attribute sind redundant.
  • Als Primärschlüssel wählen wir {SchuelerID} — interne IDs sind stabiler als z. B. eine Ausweisnummer, die sich bei Verlust ändern kann.
  • Schlüsselattribute sind alle Attribute, die in mindestens einem Kandidatenschlüssel vorkommen: SchuelerID, Ausweisnummer, Vorname, Nachname, Geburtsdatum. Nur Klasse ist ein Nichtschlüsselattribut.

Volle vs. partielle Abhängigkeit

Ein Attribut ist voll funktional abhängig von , wenn gilt und keine echte Teilmenge von schon bestimmt. Andernfalls liegt eine partielle Abhängigkeit vor.

Praktisch relevant wird das, wenn ein Kandidatenschlüssel und ein Nichtschlüsselattribut ist: Eine partielle Abhängigkeit bedeutet dann, dass schon von einem Teil des Schlüssels bestimmt wird — genau diese Fälle beseitigt die 2NF.

In der Prüfungsrelation oben ist Note voll abhängig von {SchuelerID, FachID, Datum}. Eine vereinfachte Variante mit Zwei-Attribut-Schlüssel und ergänztem SchuelerName zeigt dagegen ein Problem:

Prüfung_schlecht(SchuelerID, FachID, SchuelerName, Note)

Prüfung_schlecht
SchuelerIDFachIDSchuelerNameNote
S001MATAnna Schmidt1.7
S001DEUAnna Schmidt2.0
S002MATMax Müller2.7
S002DEUMax Müller1.3

In der Tabelle direkt sichtbar: Annas Name steht in jeder ihrer Prüfungszeilen erneut. SchuelerName hängt nur von SchuelerID ab — FachID spielt für seine Bestimmung keine Rolle. Man sagt: SchuelerName ist partiell abhängig vom zusammengesetzten Schlüssel {SchuelerID, FachID} und führt direkt zu Redundanz.

Transitive Abhängigkeit

Wenn und gelten, aber kein Schlüsselattribut ist, dann ist transitiv abhängig von .

In einer reduzierten Schüler-Relation, die nur Klasseninformation trägt:

Schüler(SchuelerID, Klasse, Klassenlehrer)

Schüler
SchuelerIDKlasseKlassenlehrer
S00110aFrau Meyer
S00210aFrau Meyer
S00310bHerr Schmidt
S00410bHerr Schmidt

Der Klassenlehrer hängt eigentlich an der Klasse, nicht am Schüler — Frau Meyer taucht zweimal auf (für jede 10a-Schülerzeile), Herr Schmidt ebenfalls. Über den Umweg Klasse ergibt sich eine indirekte Abhängigkeit von SchuelerID.

Die Folge sind Redundanzen. Wechselt die 10a den Klassenlehrer, müssen sämtliche Schülerzeilen der 10a angepasst werden.

Übersicht

TypBedeutungBeispiel
Funktionale AbhängigkeitSchuelerIDName
Volle funktionale Abhängigkeit braucht alle Attribute aus {SchuelerID, FachID}Note
Partielle Abhängigkeit hängt schon von einer echten Teilmenge von ab{SchuelerID, FachID}SchuelerName
Transitive Abhängigkeit, kein SchlüsselSchuelerIDKlasseKlassenlehrer

Interaktive Demo

Probiere die drei Typen funktionaler Abhängigkeiten selbst aus: Wähle eine oder mehrere Spalten als Determinante X — die Demo zeigt, welche Attribute Y dadurch bestimmt werden und ob die Abhängigkeit voll, partiell oder transitiv ist.

Klicke auf eine oder mehrere Spalten, um sie als Determinante X auszuwählen. Die Komponente zeigt, welche Attribute Y dadurch funktional bestimmt werden (X → Y) und ob die Abhängigkeit voll, partiell oder transitiv ist.
Vorschläge:
SchuelerIDFachIDSchuelerNameKlasseKlassenlehrerNote
S001MATAnna Schmidt10aFrau Meyer1,7
S001DEUAnna Schmidt10aFrau Meyer2,0
S002MATMax Müller10aFrau Meyer2,7
S003MATLisa Weber10bHerr Schmidt1,3
S003DEULisa Weber10bHerr Schmidt2,3

Wähle eine oder mehrere Spalten aus, um die funktionalen Abhängigkeiten anzuzeigen.

Training — Funktionale Abhängigkeiten

In der Datenbank des Onlineshops werden alle Bestellungen in einer zentralen Liste erfasst. Gegeben sei die Relation

Bestellungen(BestellNr, ProduktID, Produktname, Kategorie, Preis, KundenNr, Email, Stadt)

  1. Liste alle funktionalen Abhängigkeiten auf, die sich aus dem Schema ergeben.
  2. Untersuche die Abhängigkeiten der Nicht-Schlüsselattribute. Welche sind voll funktional vom Primärschlüssel abhängig, welche nur partiell?
  3. Überprüfe, ob transitive Abhängigkeiten zwischen Nicht-Schlüsselattributen bestehen. Begründe dein Ergebnis.

Normalisierung

Normalisierung ist ein schrittweises Verfahren, das Relationen so umformt, dass Redundanzen verschwinden und Anomalien strukturell ausgeschlossen sind. Die einzelnen Normalformen bauen aufeinander auf — jede strenger als die vorhergehende.

Erste Normalform (1NF)

Eine Relation ist in 1NF, wenn alle Attributwerte atomar sind — also nicht weiter zerlegbar (keine Listen, keine zusammengesetzten Werte, etc.).

Folgende Relation verletzt die 1NF, weil das Attribut Hobbys mehrere Werte enthält:

Schüler_alt
SchuelerIDVornameNachnameHobbys
S001AnnaSchmidtTennis, Lesen, Schwimmen
S002MaxMüllerFußball, Gitarre

Die saubere Lösung lagert die mehrwertige Eigenschaft in eine eigene Relation aus:

Schüler
SchuelerIDVornameNachname
S001AnnaSchmidt
S002MaxMüller
Hobby
SchuelerIDHobby
S001Tennis
S001Lesen
S001Schwimmen
S002Fußball
S002Gitarre

Zweite Normalform (2NF)

Eine Relation ist in 2NF, wenn sie in 1NF ist und jedes Nichtschlüsselattribut voll funktional abhängig vom gesamten Primärschlüssel ist — also keine partiellen Abhängigkeiten existieren.

Folgende Prüfungsrelation hat den zusammengesetzten Schlüssel {SchuelerID, FachID}:

Prüfung
SchuelerIDFachIDSchuelerNameFachnameNote
S001MATAnna SchmidtMathematik1.7
S001DEUAnna SchmidtDeutsch2.3
S002MATMax MüllerMathematik2.0

SchuelerName hängt nur von SchuelerID ab, Fachname nur von FachID — beides sind partielle Abhängigkeiten. Die 2NF stellt sie ab, indem sie diese Attribute in eigene Relationen auslagert:

Schüler
SchuelerIDSchuelerName
S001Anna Schmidt
S002Max Müller
Fach
FachIDFachname
MATMathematik
DEUDeutsch
Prüfung
SchuelerIDFachIDNote
S001MAT1.7
S001DEU2.3
S002MAT2.0

Dritte Normalform (3NF)

Eine Relation ist in 3NF, wenn sie in 2NF ist und kein Nichtschlüsselattribut transitiv vom Primärschlüssel abhängt.

Schüler
SchuelerIDNameKlasseKlassenlehrerRaum
S001Anna Schmidt10aFrau MeyerA201
S002Max Müller10aFrau MeyerA201
S003Lisa Weber10bHerr SchmidtA202

Hier gilt KlasseKlassenlehrer und KlasseRaum zwischen Nichtschlüsselattributen. Klassenlehrer und Raum werden für jeden Schüler einer Klasse erneut gespeichert (Redundanz). Die Auflösung trennt den Klassenkontext in eine eigene Relation ab:

Schüler
SchuelerIDNameKlasse
S001Anna Schmidt10a
S002Max Müller10a
S003Lisa Weber10b
Klasse
KlassennameKlassenlehrerRaum
10aFrau MeyerA201
10bHerr SchmidtA202

Übersicht der Normalformen

NFBedingung (zusätzlich zur Vorgängerstufe)
1NFatomare Attributwerte
2NFkeine partiellen Abhängigkeiten vom Primärschlüssel
3NFkein Nichtschlüsselattribut ist transitiv vom Primärschlüssel abhängig

In der Praxis ist die 3NF der übliche Zielzustand: Sie beseitigt die wesentlichen Redundanzen und erhält dabei alle funktionalen Abhängigkeiten.

Training — Schulbibliothek

Gegeben sei folgende Relation einer Schulbibliothek. Die AusleihID wird pro Buch fortlaufend vergeben — derselbe AusleihID-Wert kann also bei verschiedenen Büchern erneut auftauchen, weshalb erst die Kombination aus BuchID und AusleihID einen Ausleihvorgang eindeutig identifiziert.

Bibliothek(BuchID, AusleihID, Buchtitel, Autor, ISBN, SchuelerID, SchuelerName, Klasse, Ausleihdatum, Rückgabedatum)

  1. Gebe alle funktionalen Abhängigkeiten an.
  2. Begründe, warum {BuchID, AusleihID} der Primärschlüssel ist. Gibt es weitere Schlüsselkandidaten und Superschlüssel? Was sind die Schlüsselattribute?
  3. In welcher Normalform ist die Relation? Begründe.
  4. Überführe die Relation schrittweise in 2NF und 3NF und gib das resultierende Relationenschema an.
  5. Skizziere ein passendes ER-Diagramm mit (min,max)-Notation zur normalisierten Lösung.
Training — Krankenhaus

In einem Krankenhaus wird jede Behandlung durch Patient, Arzt und Datum eindeutig identifiziert. Ein Arzt gehört genau einer Abteilung an, jede Krankenkasse hat genau einen Hauptsitz.

Behandlung(PatientenID, ArztID, Datum, PatientenName, Krankenkasse, KassenHauptsitz, ArztName, Fachgebiet, Abteilung, Abteilungsleiter, Diagnose, Behandlungsdauer)

  1. Gib alle funktionalen Abhängigkeiten an.
  2. Begründe den Primärschlüssel. Gibt es weitere Schlüsselkandidaten, Superschlüssel, Schlüsselattribute?
  3. In welcher Normalform ist die Relation? Begründe mit konkreten Verstößen.
  4. Überführe schrittweise in 2NF und 3NF. Gib jeweils das vollständige Schema an.
  5. Skizziere ein ER-Diagramm mit (min,max)-Notation.