Skript: Datenbanken und SQL mit der Warenautomat-Datenbank
5. Anomalien und Normalisierung
Die Modelle aus dem vorigen Kapitel sind inhaltlich richtig aufgebaut, aber noch nicht automatisch optimal verteilt. Hier setzt die Normalisierung an: Sie überprüft, ob die Tabellenstruktur Redundanzen vermeidet und Änderungen sauber unterstützt.
5.1 Anomalien
Anomalien entstehen, wenn Daten unnötig mehrfach gespeichert werden oder Abhängigkeiten unsauber modelliert sind. Dadurch entstehen Widersprüche und Pflegeprobleme.
Wichtige Anomalie-Arten:
- Insert-Anomalie: Neue Daten können nicht sinnvoll eingefügt werden, ohne andere (eigentlich unnötige) Daten mit anzulegen.
- Update-Anomalie: Eine Information steht mehrfach in der Datenbank und muss an vielen Stellen gleichzeitig geändert werden.
- Delete-Anomalie: Beim Löschen eines Datensatzes gehen unbeabsichtigt weitere wichtige Informationen verloren.
Beispiele (vereinfacht):
- Insert-Anomalie: Ein neuer Lieferant kann nicht gespeichert werden, solange noch kein Produkt für ihn existiert.
- Update-Anomalie: Die E-Mail eines Lieferanten steht in vielen Produktzeilen und wird nur teilweise aktualisiert.
- Delete-Anomalie: Wird das letzte Produkt eines Lieferanten gelöscht, verschwinden auch dessen Lieferantendaten.
5.2 Normalisierung
Normalisierung zerlegt Daten so, dass Abhängigkeiten sauber modelliert sind und Anomalien reduziert werden. In der Warenautomat-Datenbank sieht man das gut an der Trennung von produkt und lieferant sowie von automat und standort.
Normalisierung ist damit eine Art alternative Sicht auf die semantische Modellierung: Während die semantische Modellierung zuerst inhaltliche Objekte, Beziehungen und Bedeutungen beschreibt, fragt die Normalisierung zusätzlich danach, wie diese Informationen so auf Tabellen verteilt werden, dass Redundanzen und Anomalien möglichst vermieden werden.
Ziel der Normalisierung:
- Redundanzen verringern
- Datenkonsistenz erhöhen
- Änderungen leichter und sicherer machen
5.3 Die Grundidee von 1NF, 2NF und 3NF
[!IMPORTANT] Erste Normalform (1NF): Alle Attribute enthalten atomare (unteilbare) Werte, keine Listen in einer Zelle. Beispielproblem:
produkt_tags = 'vegan, bio, regional'in einer Spalte.
[!NOTE] Zweite Normalform (2NF): Alle Nichtschlüsselattribute hängen vollständig vom gesamten Primärschlüssel ab. Relevant vor allem bei zusammengesetzten Schlüsseln.
[!NOTE] Dritte Normalform (3NF): Keine transitiven Abhängigkeiten zwischen Nichtschlüsselattributen. Nichtschlüsselattribute sollen nur vom Primärschlüssel abhängen.
Einfacher Merksatz:
- 1NF: keine Listenwerte
- 2NF: keine Teilabhängigkeiten
- 3NF: keine indirekten Abhängigkeiten
5.4 Transformationen
- 1NF: In mehrere Spalten aufspalten oder Datensatz kopieren.
- 2NF: Abhängigkeiten überprüfen und Teilabhängigkeiten in Tabellen auslagern.
- 3NF: Wie 2NF.
5.5 Beispiel aus dem Warenautomaten-Kontext
Ohne Normalisierung könnte eine Tabelle alles enthalten:
produkt_name, lieferant_name, lieferant_email, standort_ort, ...
Probleme:
- Lieferantendaten wiederholen sich bei jedem Produkt.
- Standortdaten wiederholen sich bei jedem Automaten.
- Änderungen sind fehleranfällig.
Normalisierte Struktur:
lieferant(lieferant_id, name, email, ... )produkt(produkt_id, name, preis_eur, lieferant_id, ... )standort(standort_id, bezeichnung, ort, ... )automat(automat_id, seriennummer, standort_id, ... )
Damit ist jede Information an der inhaltlich richtigen Stelle gespeichert.
Querverweise
Übungen zum Kapitel
Übung 1: Welches Problem entsteht, wenn Lieferantendaten in jeder Produktzeile wiederholt gespeichert werden?
Lösung
**Lösung:** Änderungen werden mehrfach nötig, was Update-Anomalien und Inkonsistenzen erzeugt.Übung 2: Warum ist inventar eine eigene Tabelle?
Lösung
**Lösung:** Weil die Beziehung zwischen Automat und Produkt eigene Attribute hat, zum Beispiel `fachnummer`, `max_bestand` und `aktueller_bestand`.Übung 3: Welche Anomalie entsteht, wenn beim Löschen eines Produkts gleichzeitig seine Lieferanteninformationen verloren gehen?
Lösung
**Lösung:** Eine Delete-Anomalie.Übung 4: Nenne je ein kurzes Beispiel für Insert-, Update- und Delete-Anomalie.
Lösung
**Lösung:** - Insert-Anomalie: Neuer Lieferant kann ohne Produkt nicht angelegt werden. - Update-Anomalie: Lieferanten-Telefonnummer muss in vielen Produktzeilen geändert werden. - Delete-Anomalie: Löschen des letzten Produkts entfernt ungewollt den Lieferanten.Übung 5: Welche Normalform verletzt eine Spalte mit mehreren Werten wie "snack, vegan"?
Lösung
**Lösung:** Die 1NF, weil ein Attribut keinen atomaren Einzelwert enthält.Übung 6: Warum hilft die Trennung von produkt und lieferant bei der Datenqualität?