===== Normalisierung von Datenbanken ===== ==== 1. Normalform ==== Beispiel: ^Nr.^Album^Titel^Jahr^ |1|Volume 1|Intro, Mitte 1, Mitte 2, Outro|1999| |2|Volume 2|Erster, Zweiter, Dritter|2001| In diesem Beispiel enthält die Spalte Titel eine Aufzählung -> Die einzelnen Titel können nur über Umwege separiert werden **Lösung:** Für jeden Titel wird ein eigener Datensatz erzeugt und somit die Aufzählung (Wiederholgruppe) aufgelöst. -> aufgelöste Wiederholgruppe ^Nr.^Album^Titel^Jahr^ |1|Volume 1|Intro|1999| |1|Volume 1|Mitte 1|1999| |1|Volume 1|mitte 2|1999| |1|Volume 1|Outro|1999| |2|Volume 2|Erster|2001| |2|Volume 2|Zweiter|2001| |2|Volume 2|Dritter|2001| **Problem:** Pro Satz gibt es keinen eindeutigen Schlüssel mehr. **Lösung:** Einführung eines eindeutigen Schlüssels (Primärschlüssel). ^Satz^Nr.^Album^Titel^Jahr^ |1|1|Volume 1|Intro|1999| |2|1|Volume 1|Mitte 1|1999| |3|1|Volume 1|mitte 2|1999| |4|1|Volume 1|Outro|1999| |5|2|Volume 2|Erster|2001| |6|2|Volume 2|Zweiter|2001| |7|2|Volume 2|Dritter|2001| Die 1. Normalform liegt vor, wenn keine Wiederholgruppen enthalten sind, alle Schlüsselattribute vorhanden sind und alle Nichtschlüsselattribute vom Primärschlüssel bzw. Teilen davon abhängen. ==== 2. Normalform ==== z.B.: In der oben genannten Tabelle sind Eigenschaften mit gleichem Wert mehrfach vorhanden (z.B.: Name des Albums) Würde die Eigenschaft nur in einem Datensatz geändert, bleibt sie in den übrigen Sätzen mit den ursprünglichen Werten erhalten. (Insert- und Delete-Anomalie) Lösung ist die 2. Normalform! Die 2. Normalform liegt vor, wenn sich die Datenbank in der 1. Normalform befindet und es keine Abhängigkeiten nur von Teilen des zusammengesetzten Primärschlüssels gibt. Das heißt, jede Spalte (Eigenschaft) hängt vom gesamten Primärschlüssel ab oder ist selbst Primärschlüssel. Im Beispiel: Primärschlüssel Satz und Nr. * Album und Jahr hängen nur von Nr. ab. * Auslagerung in eigene Tabelle ==== 3. Normalform ==== Spalten, deren Inhalt sich zum Beispiel aus Berechnungen anderer Spalten ergeben, müssen bei Änderungen aktualisiert werden. **Problem:** Aktualisierung muss automatisch erfolgen. **Lösung:** Spalten, die funktional von anderen Spalten abhängig sind, müssen generell beseitigt werden. **Beispiel:** ^Nr.^Stundenlohn (€)^Arbeitszeit (h)^Gesamt^ |1|30,55|4,5|= 30,55 * 4,5| Spalte **„Gesamt“** ist funktional von Stundenlohn und Arbeitszeit abhängig und muss entfernt werden. Die 3. Normalform liegt vor, wenn sich die Tabelle in der 2. Normalform befindet und keine funktionalen Abhängigkeiten bestehen.