Der Begriff Integritätsbedingung bezeichnet in der Informatik Bedingungen, die an den Zustand eines Prozesses gestellt werden.
Definition
Integritätsbedingungen beschreiben Annahmen im Bezug auf Wertebereiche, Abhängigkeiten oder Verlässlichkeit von Daten. Basierend auf diesen Annahmen kann ein Programmierer Verarbeitungprozesse beschreiben und gegebenenfalls den Zustand eines Prozesses verändern. Es ist im Allgemeinen das Ziel, die Einhaltung von Integritätsbedingungen nicht dem einzelnen Programmierer zu überlassen. Die Annahme falscher Integritätsbedingungen, ungenau spezifizierte, sich ändernde oder auch widersprechende Bedingungen sind häufige Ursachen für Programmierfehler. Relationale Datenbanksysteme bieten die Möglichkeit, bei der Definition eines relationalen Schemas Integritätsbedingungen zu formulieren, deren Einhaltung von dem System garantiert wird. Ein typisches Beispiel für Integritätsbedingungen sind Fremdschlüsselbeziehungen (siehe Schlüssel (Datenbank)).
Es lässt sich spezifizieren, auf welche Art die Einhaltung gewährleistet werden soll, bzw. wie auf Änderungen reagiert werden soll. Eine Änderung, die eine Integritätsbedingung verletzt, kann entweder ganz unterbunden werden oder aber weitere Änderungen zur Wiederherstellung der Integrität nach sich ziehen (siehe hierzu: Datenbanktrigger).
Beispiel
Das nachfolgende SQL Beispiel modelliert, auf stark vereinfachte Weise, einen Zusammenhang zwischen Professoren, Studenten, Vorlesungen und Prüfungen.
Das Augenmerk soll hier auf die Fremdschlüsselbeziehungen gelegt werden:
create table professor (
id integer primary key
);
create table student (
matnr varchar(16) primary key
);
create table vorlesung (
id integer primary key,
name varchar(32),
prof integer references professor.id
on delete set null
);
create table prüfung (
datum date,
vorlesung integer not null
references vorlesung.id
on delete no action,
stud varchar(16) not null
references student.matnr
on delete cascade
);
Folgende Integritätsbedingungen werden in diesem Beispiel definiert:
- Ein Vorlesung referenziert einen Professor. Falls der Professor emeritiert (und der entsp. Datensatz gelöscht wird), bleibt die Vorlesung erhalten. Der Zusatz on delete set null löscht die Referenz auf den Professor, falls der referenzierte Datensatz gelöscht wird (Integritätsbedingung: der referenzierte Professor hält die Vorlesung).
- Jede Prüfung referenziert eine Vorlesung. Solange noch eine Prüfung für eine Vorlesung existiert, darf diese nicht aus der Datenbank gelöscht werden. Der Zusatz on delete no action verhindert, dass ein referenzierter Datensatz aus der Tabelle "vorlesung" gelöscht wird. (Integritätsbedingung: Zu jeder Prüfung gibt es auch eine Vorlesung).
- Jede Prüfung referenziert einen Studenten, der die Prüfung abgibt. Falls der Student exmatrikuliert (und der entsp. Datensatz gelöscht wird), findet auch die Prüfung nicht statt. Der Zusatz on delete cascade führt dazu, dass eine Prüfung gelöscht wird, falls der referenzierte Student gelöscht wird. (Integritätsbedingung: Ohne Student gibt es auch keine Prüfung)
Die Einhaltung dieser Bedingung gewährleistet die Datenbank.
Anmerkungen
- Naturgemäß schränkt die Spezifikation von Integritätsbedingungen die Zahl der erlaubten Operationen ein. Da sich in einer relationalen Datenbank diese Einschränkungen auch auf andere Tabellen auswirken können, als auf die konkrete Tabelle innerhalb derer sie spezifiziert wurden, gibt es eine spezielle Berechtigung, die es erlaubt eine erstellte Tabelle zu referenzieren. Im obigen Beispiel verhindert der Zusatz on delete no action das Löschen von Einträgen der Tabelle vorlesung. Entsprechend muss der Besitzer der Tabelle prüfung die Berechtigung besitzen, die Tabelle vorlesung zu referenzieren.
- Da die Einhaltung von Integritätsbedingungen im Einzelfall aufwändige Prüfungen zur Folge haben kann, wird häufig auf die explizite Spezifikation der Bedingungen innerhalb der Datenbank verzichtet. Bei der Erstellung der Software müssen in diesem Fall, die daraus resultierenden Datenschiefständen berücksichtigt werden. Das heißt, die Software muss mit inkonsistenten Daten innerhalb der zugrundeliegenden Datenbank umgehen können. Für eine fehlerfreie Software kann somit auf eine Prüfung der Integritätsbedingungen nicht verzichtet werden.
Literatur
- Alfons Kemper, André Eickler: Datenbanksysteme. Eine Einführung. Oldenbourg, München 2004, ISBN 3-486-27392-2
- Victor M. Markowitz: Safe Referential Structures in Relational Databases, VLDB, September 1991, Barcelona, Seiten 123-132, ISBN 1-55860-150-3