Was ist Referentielle Integrität?

3 Antworten

Die referentielle Integrität ist gegeben, wenn das, worauf ein Datenfeld sich bezieht, auch wirklich vorhanden ist. Mit der Angabe einer Kunden-Nr z.B. in der entsprechenden Spalte einer Tabelle sollte diese Nr auch auf einen Satz in der Kundentabelle verweisen, der auch wirklich vorhanden ist. Ist er das nicht, liegt ein Fehler der referentiellen Integrität vor. Erfolgt der Verweis mittels eines Fremdschlüssels (nicht zwingend, aber sinnvoll), so wird die Erhaltung der referentiellen Integrität von der Datenbank überwacht. Die Art der Überwachung wird beim Einrichten der Datenbank festgelegt. Es gibt die drei Arten jeweils beim Eintragen und Löschen der überwachten Daten:

  1. RESTRICT: Nicht erlaubt, der Versuch wird mit einer Fehlermeldung abgebrochen.
  2. CASCADE: Alle Sätze der Beziehung werden gelöscht. Wird z.B. ein Kundensatz gelöscht, so werden auch alle damit verbundenen Rechnungen, Bestellungen und Aufträge mitgelöscht.
  3. SET NULL: Die ungültige Verbindung wird auf NULL gesetzt, der Satz bleibt bestehen.

Wenn man eine Tabelle hat mit einer Spalte, in der Fremdschlüssel erwartet werden (d.h. Werte, deren jeder als Schlüsselattribut eines Datensatzes aus einer bestimmten anderen Tabelle aufgefasst sein möchte), so will man natürlich sicher sein, dass jene anderen Datensätze auch tatsächlich existieren.

  • Tun sie es, so sagt man, referentielle Integrität sei gegeben.
  • Existiert aber wenigstens einer dieser Datensätze nicht, so ist referentielle Integrität nicht mehr gegeben.
grtgrt  06.03.2018, 19:01

Wie man sieht, ist referentielle Integrität keine Eigenschaft einer Datenbank, sondern eine dringend gewünschte Eigenschaft des in der Datenbank aufbewahrten Datenbestandes.

0
dan030  06.03.2018, 19:26
@grtgrt

Sicherstellung referentieller Integrität kann durchaus Merkmal einer Datenbank-Engine bzw. eines konkreten Datenbank-Setups sein. Bessere Datenbanksysteme ermöglichen es nämlich, sogenannte "constraints" für einzelne Felder zu definieren, z. B. "number references othertable(key_in_other_table)". Notation bei diversen Datenbank-Engines leicht unterschiedlich.

Effekt von solchen Constraints ist, dass eben bereits auf DB-Ebene verhindert wird, dass die referentielle Integrität verletzt wird. D. h. INSERT mit ins Leere zeigenden Fremdschlüsseln wird abgeschmettert, DELETE eines von anderer Tabelle aus referenzierten Datensatzes ebenfalls.

1

Referentielle Integrität ist die Eigenschaft einer relationalen Datenbank, dass für jeden Fremdschlüssel eines Datensatzes auch der referenzierte Datensatz existiert. Es darf also keine Verweise auf nicht-existente Datensätze geben.