SQL / MySQL - Online-Schulung www.SQL-Online-Schulung.de Normalisierung von relationalen Datenbanken Durch die Normalisierung soll eine widerspruchs- und redundanzfreie Datenspeicherung erzielt werden. Grund hierfür sind die Vermeidung von Datenbankanomalien und inkonsistenten Daten. Anomalien können zum Beispiel beim Einfügen oder Löschen auftreten, falls das Einfügen eines neuen Landes nur bei gleichzeitiger Erfassung einer Stadt des Landes möglich ist oder beim Löschen eines Städtesatzes die Informationen über das Land gleich mit gelöscht werden. So würden Änderungsanomalien auftreten, falls bei jeder Stadt die Landesinformationen mit geführt werden und die Einwohnerzahl des Landes angepaßt werden soll. Wäre die Einwohneranzahl des Landes in jedem Städtesatz des Landes enthalten, so müßte diese Zahl in jedem Städtesatz entsprechend angepaßt werden. Falls diese Anzahl am Ende nicht in jedem Satz angepaßt werden würde, käme es zu den oben genannten widersprüchlichen Datenständen und damit zu inkonsistenten Daten in der DB. Bei relationalen Datenbanksystemen werden die Daten in Tabellen abgelegt. In den Zeilen stehen die Datensätze (engl. Records), in den Spalten die einzelnen Attribute (Satzelemente) der Sätze (z.B. bei Adressen die Attribute: PLZ, Ort-ID, Strasse, ...) . Jeder Datensatz einer Tabelle erhält einen primären Schlüssel (engl. Primary Key), der den Satz eindeutig identifiziert sowie optional weitere Schlüssel für gewichtige Attribute. Über diese Schlüssel werden die Sätze der Tabellen miteinander verknüpft – in Beziehung gesetzt. Für die Schlüsselfelder erfolgt das Anlegen von Index-Tabellen, um einen schnellen Zugriff auf die Datensätze oder eine schnelle Sortierung der Daten zu ermöglichen. Um bei den Daten eine Datenredundanz (unnötige Doppelungen) von gleichen Inhalten und damit Änderungsanomalien auszuschließen, werden die Tabellen normalisiert. So ist zum Beispiel bei den Adress-Sätzen der Ort nicht immer wieder einzutragen, sondern eine zweite Orte-Tabelle mit den Attributen Ort-ID und Ort anzulegen. Bei den AdressSätzen ist in der Folge die Ort-ID des Ortes einzutragen anstelle des Ortes. Auf diese Weise ist die Ortsbezeichnung nur einmal in der Ort-Tabelle vorhanden. Zudem ergibt sich aus dieser Verfahrensweise eine Tabelle mit allen verwendeten Orten. Ein Ort wird über den Schlüssel Ort-ID mit der Ort-ID eines Adress-Satzes verbunden. Zur Anschauung sind nachstehende Tabellen einer kleinen Adressverwaltung mit Ort und Stadtteil abgebildet. Adress-Tabelle Adress-ID PLZ Ort-ID Strasse Bezirk-ID 1 2 3 4 5 6 7 10178 10178 10629 20359 20359 80331 80336 1 1 1 2 2 3 3 Rathausstraße Rosenstraße Mommsenstraße Hafenstraße Davidstraße Kauffingerstraße Bavariaring 1 1 2 3 3 4 5 Ort-Tabelle Ort-ID Ort KfZ 1 2 3 Berlin Hamburg München B HB M Bezirk-Tabelle Bezirk-ID Ort-ID Bezirk 1 2 3 4 5 1 1 2 3 3 Mitte Charlottenburg St. Pauli Altstadt Isar-Vorstadt Erläuterungen: Nehmen wir z.B. den Satz mit der Adress-ID = 6 aus der Adress-Tabelle. Über den Zugriff auf die Ort-Tabelle mit der Ort-ID = 3 des Satzes erhalten wir den zugeordneten Ort des Satzes, nämlich Ort = München. Über die Bezirk-ID = 4 erhalten wir nach Zugriff auf die Bezirk-Tabelle den Wert Bezirk = Altstadt. Wir stellen fest, daß das Kfz für Hamburg in HH geändert werden muss. Wir müssen es nur in einem Satz der Ort-Tabelle ändern und nicht in allen Hamburger Adress-Sätzen. An diesem Beispiel zeigt sich ein wichtiger Vorteil von normalisierten Tabellen.