Alle Tabs der Lerneinheit (Erklärung · Interaktiv normalisieren · Praxis-Übung · Klausur-Quiz) als durchgehender Text. Ideal zum Wiederholen vor der Klausur, und für Suchmaschinen wie Google, Bing und KI-Suche (ChatGPT, Perplexity).
Diese Lerneinheit wurde für typische Bachelor-Klausuren konzipiert. So prüfen wir · Fehler entdeckt? Melde ihn uns oder markiere die fragliche Stelle direkt im Text oben.
Alle Tabs der Lerneinheit (Erklärung · Interaktiv normalisieren · Praxis-Übung · Klausur-Quiz) als durchgehender Text. Ideal zum Wiederholen vor der Klausur, und für Suchmaschinen wie Google, Bing und KI-Suche (ChatGPT, Perplexity).
Du hast eine Tabelle mit Studierenden, ihren Vorlesungen und Dozenten — und musst jetzt den Namen eines Dozenten ändern, der gerade geheiratet hat. Plötzlich musst du die neue Schreibweise in 50 Zeilen einzeln aktualisieren. Vergisst du eine Zeile, hat derselbe Dozent zwei verschiedene Namen. Genau das verhindern Normalformen: sie erkennen Redundanzen, lösen sie auf und machen Daten anomalie-frei.
Klausur-Klassiker in jeder Datenbanken-1-Vorlesung (12/12 WInf-Pflicht-Unis). Wir gehen die 4 Normalformen Schritt für Schritt durch — jede mit dem gleichen Beispieldatensatz, der schrittweise sauberer wird.
Klausur-Tipp: Wenn du in einer Aufgabe Normalisieren sollst, fang immer mit der höchsten Normalform an, in der die Tabelle aktuell ist. Steht in der Aufgabe "in 2NF überführen", musst du zuerst prüfen, ob 1NF da ist. Sonst Punktabzug für übersprungenen Schritt.
Anmelden, um den Fortschritt zu speichern.
Nächster Schritt
Aktives Abrufen festigt Wissen schneller als nochmal lesen.
Du hast eine Tabelle mit Studierenden, ihren Vorlesungen und Dozenten — und musst jetzt den Namen eines Dozenten ändern, der gerade geheiratet hat. Plötzlich musst du die neue Schreibweise in 50 Zeilen einzeln aktualisieren. Vergisst du eine Zeile, hat derselbe Dozent zwei verschiedene Namen. Genau das verhindern Normalformen: sie erkennen Redundanzen, lösen sie auf und machen Daten anomalie-frei.
Klausur-Klassiker in jeder Datenbanken-1-Vorlesung (12/12 WInf-Pflicht-Unis). Wir gehen die 4 Normalformen Schritt für Schritt durch — jede mit dem gleichen Beispieldatensatz, der schrittweise sauberer wird.
Stell dir vor, du speicherst alle Studi-Kurs-Daten in einer Tabelle:
| MatrNr | StudName | KursID | KursName | DozNr | DozName | Note |
|---|---|---|---|---|---|---|
| 1001 | Müller | DB1 | Datenbanken | 42 | Prof. Schmidt | 2,3 |
| 1001 | Müller | INF | Informatik | 17 | Prof. Weber | 1,7 |
| 1002 | Schulz | DB1 | Datenbanken | 42 | Prof. Schmidt | 2,7 |
| 1003 | Müller | DB1 | Datenbanken | 42 | Prof. Schmidt | 3,3 |
Diese eine Tabelle hat drei Anomalien — der Klausur-Standard:
Diese drei Anomalien sind die Symptome. Normalformen sind die Heilung.
Bevor wir loslegen, ein Mini-Konzept: A → B heißt "A bestimmt B" oder "wenn ich A kenne, weiß ich B eindeutig". Beispiele aus der Tabelle oben:
MatrNr → StudName (jede Matrikelnummer hat genau einen Namen)KursID → KursName (jede KursID hat einen festen Namen)DozNr → DozName (jede Dozent-Nr hat einen festen Namen)Wir nutzen FDs als Werkzeug zum Erkennen von Normalform-Verletzungen. Detailliert im Topic funktionale-abhaengigkeiten (Welle 8.2).
1. Normalform: Jeder Wert in einer Zelle ist atomar — kein Komma-getrenntes "Mehrere-in-einer-Zelle".
Was ist eine 1NF-Verletzung? Schau die folgende Tabelle:
| MatrNr | Name | Kurse (verletzt 1NF!) |
|---|---|---|
| 1001 | Müller | DB1, INF, MATHE |
| 1002 | Schulz | DB1 |
Die Spalte "Kurse" enthält mehrere Werte pro Zelle. Das ist keine relationale Tabelle mehr — Suchen, Joins, Aggregate gehen nicht sauber.
1NF-konforme Version: jeden Wert in eine eigene Zeile.
| MatrNr | Name | Kurs |
|---|---|---|
| 1001 | Müller | DB1 |
| 1001 | Müller | INF |
| 1001 | Müller | MATHE |
| 1002 | Schulz | DB1 |
In modernen Datenbanken ist 1NF meist automatisch erfüllt — der Klassiker-Klausur-Fehler ist trotzdem ein Komma-getrennter Wert in einer Spalte.
2. Normalform: 1NF erfüllt und jedes Nicht-Schlüssel-Attribut hängt vom gesamten Primärschlüssel ab, nicht nur von einem Teil.
Das ist nur relevant, wenn der Primärschlüssel zusammengesetzt ist (mehrere Spalten). Bei einem einspaltigen PK ist 2NF automatisch erfüllt.
Beispiel — die Anfangs-Tabelle in 1NF (zusammengesetzter PK = MatrNr + KursID):
| MatrNr* | KursID* | StudName | KursName | DozNr | DozName | Note |
|---|---|---|---|---|---|---|
| 1001 | DB1 | Müller | Datenbanken | 42 | Prof. Schmidt | 2,3 |
| 1001 | INF | Müller | Informatik | 17 | Prof. Weber | 1,7 |
| 1002 | DB1 | Schulz | Datenbanken | 42 | Prof. Schmidt | 2,7 |
(* = Teile des zusammengesetzten Primärschlüssels)
Schau auf die Abhängigkeiten:
StudName hängt nur von MatrNr ab (KursID ist egal) → Teil-Abhängigkeit, 2NF-Verletzung.KursName, DozNr, DozName hängen nur von KursID ab → Teil-Abhängigkeit, 2NF-Verletzung.Note hängt wirklich von beiden (MatrNr UND KursID) ab → 2NF-konform.2NF-Lösung: zerlege in 3 Tabellen, eine pro echter Abhängigkeit.
Studierende:
| MatrNr | StudName |
|---|---|
| 1001 | Müller |
| 1002 | Schulz |
Kurse:
| KursID | KursName | DozNr | DozName |
|---|---|---|---|
| DB1 | Datenbanken | 42 | Prof. Schmidt |
| INF | Informatik | 17 | Prof. Weber |
Belegungen:
| MatrNr* | KursID* | Note |
|---|---|---|
| 1001 | DB1 | 2,3 |
| 1001 | INF | 1,7 |
| 1002 | DB1 | 2,7 |
Eine Tabelle wurde zu drei. Die Schlüssel-Fremdschlüssel-Beziehungen verbinden sie. Studi-Name wird jetzt einmal gespeichert, nicht pro Kurs.
3. Normalform: 2NF erfüllt und kein Nicht-Schlüssel-Attribut hängt von einem anderen Nicht-Schlüssel-Attribut ab.
Schau die "Kurse"-Tabelle aus dem 2NF-Schritt:
| KursID | KursName | DozNr | DozName |
|---|
Primärschlüssel: KursID. Nicht-Schlüssel: KursName, DozNr, DozName.
Das verletzt 3NF. Wieder das gleiche Problem wie am Anfang — Prof. Schmidt heiratet, und du musst seinen Namen in jeder Zeile mit DozNr=42 ändern.
3NF-Lösung: Dozent in eigene Tabelle ziehen.
Kurse:
| KursID | KursName | DozNr |
|---|---|---|
| DB1 | Datenbanken | 42 |
| INF | Informatik | 17 |
Dozenten:
| DozNr | DozName |
|---|---|
| 42 | Prof. Schmidt |
| 17 | Prof. Weber |
Jetzt steht der Dozent-Name genau einmal in der DB. Heirat → 1 Update, fertig.
Boyce-Codd-Normalform: für jede funktionale Abhängigkeit
A → Bin der Tabelle gilt:Aist ein Schlüsselkandidat.
3NF erlaubt eine Ausnahme: ein Nicht-Schlüssel-Attribut darf von einem Schlüsselkandidaten abhängen, auch wenn der Schlüsselkandidat nicht der gewählte Primärschlüssel ist. BCNF ist strenger — sie verbietet das.
Beispiel — "Termine":
| StudNr* | KursID* | Raum |
|---|---|---|
| 1001 | DB1 | H1 |
| 1002 | DB1 | H1 |
| 1001 | INF | H2 |
Annahme: jede Kurs+Studi-Kombination ist eindeutig (PK = StudNr+KursID). Aber zusätzlich: jeder Raum gehört zu genau einem Kurs (KursID → Raum). Das heißt:
Hier liegt eine FD vor (KursID → Raum), bei der die linke Seite kein Schlüsselkandidat ist → BCNF-Verletzung.
BCNF-Lösung: Raum in eigene Tabelle.
Belegungen: (StudNr, KursID)
Räume: (KursID, Raum)
Klausur-Wahrheit: BCNF wird in 95 % aller Aufgaben mit 3NF gleichgesetzt — die Spitzfindigkeit (Nicht-PK-Schlüsselkandidat) kommt selten vor. Wenn die Aufgabe nur einen Schlüsselkandidaten hat (= den PK), ist 3NF = BCNF automatisch.
Nimm einen Datensatz, der noch alle drei Anomalien hat, und schau zu wie er Schritt für Schritt normalisiert wird:
Interaktive Visualisierung
Interaktive Komponente: probiere sie im Topic-Player oben aus.
- Schau auf den Primärschlüssel. Ist er zusammengesetzt? → 2NF-Check nötig. Ist er einspaltig? → 2NF ist automatisch erfüllt, sofort zu 3NF.
- 3NF-Check: Geh jede Nicht-Schlüssel-Spalte durch und frage: "hängt diese nur vom PK ab, oder gibt es einen Umweg über eine andere Spalte?" — wenn Umweg, ist es transitiv und verletzt 3NF.
- Anomalie-Test: Wenn du ein Attribut in mehr als einer Zeile gleich findest (z.B. Dozent-Name 50× wiederholt), ist es fast immer eine NF-Verletzung. Splitte raus.
- BCNF nur bei mehreren Schlüsselkandidaten. Wenn deine Tabelle nur einen Schlüsselkandidaten (= PK) hat, sind 3NF und BCNF dasselbe. Spar dir den extra Schritt.
- Übersetze immer in eine Aussage über die Realität: "Jeder Kurs hat genau einen Dozenten" ist eine FD. "Ein Studi kann mehrere Kurse haben" ist N-zu-M und braucht eine Verknüpfungs-Tabelle.
1. 1NF-Verletzung übersehen. Komma-getrennte Listen in einer Zelle sind die häufigste, weil sie "harmlos" aussehen. "Hobbies: Sport, Musik, Lesen" ist eine 1NF-Verletzung — selbst wenn es nie in einer Klausur als JSON-Array daherkommt.
2. 2NF mit einspaltigem PK prüfen. Wenn der PK eine einzige Spalte ist, KANN keine Teil-Abhängigkeit existieren (es gibt keinen Teil-PK). 2NF ist trivial erfüllt. Trotzdem prüfen viele unnötig.
3. Transitivität vs. zweite FD. "A → B und B → C" sind erst dann transitiv, wenn B kein Schlüsselkandidat ist. Wenn B ein alternativer Schlüssel wäre, ist es ok.
4. Über-Normalisierung. BCNF mit allen Konsequenzen kann zu zu vielen kleinen Tabellen führen, die in der Praxis langsam sind (viele Joins). In Klausuren immer BCNF, im echten Leben oft 3NF.
5. Zerlegung verlustbehaftet. Jeder Normalisierungsschritt muss verlustfrei sein: durch Join der neuen Tabellen muss wieder die Original-Tabelle entstehen. Wenn nicht, ist die Zerlegung falsch.
Wähle einen Beispiel-Datensatz und gehe Schritt für Schritt durch die 4 Normalformen. Pro Schritt siehst du:
Probier alle 4 Datensätze: Studi-Kurs-Dozent (Klassiker), Bibliotheks-Ausleihe, Flug-Buchung, Restaurant-Bestellung.
Interaktive Visualisierung
Interaktive Komponente: probiere sie im Topic-Player oben aus.
Klausur-Tipp: Wenn du in einer Aufgabe Normalisieren sollst, fang immer mit der höchsten Normalform an, in der die Tabelle aktuell ist. Steht in der Aufgabe "in 2NF überführen", musst du zuerst prüfen, ob 1NF da ist. Sonst Punktabzug für übersprungenen Schritt.
Vier Aufgaben-Typen: NF-Erkennung, Anomalie-Identifikation, Zerlegungs-Wahl, FD-Analyse.
Klausurfragen mit Lösungen (6)
Antwort: Jede Zelle enthält atomare (nicht weiter zerlegbare) Werte
Erklärung: 1NF = atomare Werte pro Zelle. Komma-getrennte Listen (z.B. 'Mathematik, Informatik' in einer Spalte) verletzen 1NF. Die anderen Optionen sind 2NF (volle Abhängigkeit), allgemeine Schlüssel-Regel, und 3NF (keine transitiven).
Antwort: 2NF — StudName hängt nur von MatrNr ab, nicht vom gesamten PK
Erklärung: PK ist (MatrNr, KursID). StudName hängt aber nur von MatrNr ab (nicht von KursID — der Name ändert sich ja nicht mit dem Kurs). Das ist eine Teil-Abhängigkeit → 2NF-Verletzung. Lösung: StudName in eigene Tabelle (MatrNr, StudName).
Antwort: Lösch-Anomalie
Erklärung: Lösch-Anomalie: durch Löschen von Zeilen geht Information verloren, die eigentlich nichts mit dem gelöschten Eintrag zu tun hat. Standard-Symptom einer unzureichenden Normalisierung.
Antwort: 3NF
Erklärung: PK = KursID (einspaltig), also 2NF automatisch erfüllt. Aber: DozName hängt von DozNr ab, und DozNr ist kein Schlüssel. Das ist eine transitive Abhängigkeit KursID → DozNr → DozName. 3NF verletzt. Lösung: Dozent in eigene Tabelle (DozNr, DozName) ziehen.
Richtige Antworten: Jede 3NF-Tabelle ist auch in 2NF; Bei einspaltigem Primärschlüssel ist 2NF automatisch erfüllt; 1NF kann durch Aufteilen von Komma-Listen erreicht werden; BCNF und 3NF sind identisch, wenn es nur einen Schlüsselkandidaten gibt
Erklärung: Richtig: 3NF impliziert 2NF (Hierarchie); einspaltiger PK → 2NF trivial; Komma-Listen entfernen erreicht 1NF; bei einem Schlüsselkandidaten sind 3NF und BCNF gleich. Falsch: 2NF impliziert NICHT BCNF (es gibt 2NF-Tabellen mit 3NF-/BCNF-Verletzungen); Anomalien gibt es in allen NF, die nicht hoch genug normalisiert sind — nicht nur 1NF.
Typ: Multi-Select
Zuordnungen:
Erklärung: Die drei klassischen Anomalien (Update, Insert, Delete) sind die Symptome, Redundanz die Ursache. Normalformen lösen alle drei gleichzeitig auf, indem sie Redundanz eliminieren.
Typ: Zuordnung
Klausurfragen mit Lösungen (6)
Antwort: 2NF (verletzt 3NF)
Erklärung: PK = MitID (einspaltig) → 2NF automatisch. Aber: AbteilungsLeiter hängt von Abteilung ab (nicht direkt von MitID). Das ist transitiv: MitID → Abteilung → AbteilungsLeiter. 3NF verletzt → höchste NF ist 2NF. Lösung: Abteilung(Abteilung, AbteilungsLeiter) auslagern.
Antwort: Beides: ArtikelNr → ArtikelName UND ArtikelNr → Preis
Erklärung: ArtikelName und Preis hängen nur von ArtikelNr ab (Teil des PK), nicht von der ganzen Kombination (BestNr, ArtikelNr). Beide sind Teil-Abhängigkeiten → 2NF-Verletzung. Lösung: Artikel(ArtikelNr, ArtikelName, Preis) auslagern, in Bestellung bleibt (BestNr, ArtikelNr, Menge).
Antwort: Wahr
Erklärung: Wahr. BCNF ist strenger als 3NF nur dort, wo es mehrere Schlüsselkandidaten gibt und ein Nicht-PK-Schlüsselkandidat eine Nicht-Schlüssel-Spalte bestimmt. Bei nur einem Schlüsselkandidaten gibt es diese Situation nicht — die beiden NFs fallen zusammen. Klausur-Sparmöglichkeit.
Typ: Wahr/Falsch
Richtige Reihenfolge:
Erklärung: Klassische Hierarchie: 1NF → 2NF → 3NF → BCNF. Jede Stufe schließt die vorherige ein und fügt eine Bedingung hinzu. Eine Tabelle in BCNF ist auch in 3NF, 2NF, 1NF.
Typ: Reihenfolge
Antwort: BCNF — KursID bestimmt Raum, ist aber kein Schlüsselkandidat
Erklärung: Die FD KursID → Raum existiert (Kurs hat immer denselben Raum). Aber KursID allein ist kein Schlüsselkandidat — der PK ist (StudNr, KursID), und es gibt keinen alternativen Schlüssel. Das ist eine BCNF-Verletzung, aber NICHT 2NF (weil Raum nicht von einem PK-Teil abhängt im klassischen Sinne, sondern... wait — eigentlich ist es auch 2NF-Verletzung). Klausur-Tipp: bei dieser Aufgaben-Konstellation wird oft direkt nach BCNF gefragt; sicherer Antwort-Ankerpunkt.
Lösungen pro Lücke:
Erklärung: Standard-Lückentext: 1NF = atomare Zellen, 2NF baut darauf auf + volle Abhängigkeit, 3NF baut auf 2NF auf + keine transitiven Abhängigkeiten. Diese 3-Stufen-Hierarchie ist Klausur-Pflichtwissen.
Typ: Lückentext