Die endgültige Vermeidung von Dateninkonsistenzen mit Hilfe der strukturellen Integritätsbedingungen

Die systematische Vermeidung von Redundanzen ist ein wichtiger Schritt hin zur vollkommenen Datenintegrität einer Datenbank, da hiermit bereits die Möglichkeit von Widersprüchen ausgeräumt worden ist.
Trotzdem kann es vorkommen, dass Daten zueinander dem Inhalt nach „nicht passen“ – die Datenintegrität ist nicht gewährleistet. Man spricht auch von Dateninkonsistenz.
Mit der Einhaltung von drei Bedingungen können Dateninkonsistenzen systematisch verhindert oder ausgeräumt werden:

Die zentrale Frage der Berücksichtigung der strukturellen Intergritätsbedingungen lautet:

  • Wie können Dateninkonsistenzen nach der Beseitigung von Redundanzen in Datenbanken systematisch verhindert werden?

1. Die Eindeutigkeitsbedingung

Jeder Datensatz muss, bezogen auf die Gesamtheit seiner Attributswerte, eindeutig sein. Man spricht dann auch von einer „Entität“. Damit nun zwei Datensätze, welche die gleichen Attributswerte enthalten, trotzdem unterscheidbar sind, bekommt jede Tabelle eine Spalte in welcher jedem Datensatz eine sog. ID zugewiesen wird. Das DBMS ist in der Lage, die ID automatisch zu vergeben, indem es jedem Datensatz eine fortlaufende Nummer gibt. Weil diese Nummer keinerlei Bezug zur Realität hat, spricht man auch von einem „künstlichen Schlüssel“. In diesem Zusammenhang sei dringend davon abzuraten, stattdessen einen „sprechenden Schlüssel“ zu verwenden, welcher Auskunft über ein reales Merkmal gibt.
Ein Beispiel: Obwohl die Räume in einem Schulhaus eindeutig benannt sind, sollte die Tabelle tbl_raum trotzdem eine Spalte für die raum_id enthalten. Sollten die Räume – aus welchem Grund auch immer – einmal umbenannt werden, so ist gewährleistet, dass die Daten trotzdem noch konsistent sind.

2. Die Wertebereichsbedingung

Innerhalb eines Attributs sollte nach Möglichkeit festgelegt werden, aus wie vielen Zeichen und/oder innerhalb welches Zahlen- oder Nummernbereiches die Einträge erfolgen sollen. So ist es z.B. ratsam für den Eintrag der PLZ exakt fünf Ziffern vorzusehen, welche nicht als Zahl definiert werden dürfen, da sonst der Eintrag einer „0“ an erster Stelle nicht möglich wäre.

3. Die Bedingung der referentiellen Integrität

Die Datenintegrität soll nicht nur in den Tabellen selbst, sondern auch über die Tabellen hinweg, d.h. für die Beziehungen der Tabellen untereinander gesichert werden. D.h. bei jeder Eingabe, Änderung oder Löschung von Daten muss die Auswirkung auf die in Beziehung stehenden Tabellen berücksichtigt werden. Die Bedeutung dieser letzten und wahrscheinlich auch kompliziertesten Bedingung sei an folgendem Beispiel erklärt:

Berücksichtigung der referentiellen Integrität

In der Tabelle tbl_person verweist der Eintrag der plz_nr  auf die plz_id, welcher der Person zugeordnet ist. Jede Person kann nur einer existierenden plz_id zugeordnet werden. Das Datenbanksystem muss sicherstellen, dass das Ziel des Verweises vorhanden ist, d.h. dass beispielsweise zu jeder plz_nr  auch eine plz_id  mit entsprechender Postleitzahl vorhanden sein muss. Wird eine neue Person in die Datenbank aufgenommen, so dass ihr Datensatz erst endgültig abgespeichert werden, wenn ihr als plz_nr ein Datensatz aus der Tabelle tbl_plz zugeordnet ist.

Da die Tabelle tbl_plz ihre Informationen an die Tabelle tbl_person i.F. der plz_nr weitergibt, spricht man in dieser Beziehung von der tbl_plz als Vaterrelation, während die tbl_person in dieser Beziehung die Rolle der Sohnrelation übernimmt, welche Informationen erhält.

Ausgehend von dieser Rollenverteilung spricht man bei der Vaterrelation vom sog. Primärschlüssel. Die Sohnrelation nimmt diesen als Fremdschlüssen bei sich auf. Die Endungen _id und _nr dienen der Unterscheidbarkeit und haben keinen funktionalen Hintergrund.

Zusammenfassend ist festzustellen, dass das DBMS im Rahmen der referentiellen Integritätsbedingung darüber wacht, dass keiner Person ein Wert als Fremdschlüssel zugewiesen wird, der nicht in der tbl_plz bereits vorhanden ist. In unserem Eingangsbeispiel wären folglich nur die Werte 1 – 6 möglich, da ein Eintrag mit dem ID-Wert > 6 nicht existiert.