Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Integritätsbedingung

Eine Integritätsbedingung ist eine Regel, die den Wertebereich für eine Spalte oder für mehrere Spalten einschränkt. Ähnlich wie nur Werte in die Datenbank aufgenommen werden, die mit dem für die entsprechende Spalte definierten Datentyp kompatibel sind, lässt SESAM/SQL nur Werte zu, die den definierten Integritätsbedingungen genügen. Eine Integritätsbedingung kann als eine für eine bestimmte Spalte oder mehrere Spalten formulierte Suchbedingung aufgefasst werden, deren Wahrheitswert nie falsch werden darf. Ein Satz kann nur in eine Tabelle aufgenommen oder aus einer Tabelle gelöscht werden und ein Spaltenwert kann nur geändert werden, wenn alle zugehörigen Integritätsbedingungen auch nach der Änderung noch erfüllt sind.

Eine Integritätsbedingung kann bei der Tabellendefinition mit CREATE TABLE definiert werden. Mit ALTER TABLE kann eine neue Integritätsbedingung für eine bestehende Basistabelle hinzugefügt oder eine Integritätsbedingung gelöscht werden.

Eine Integritätsbedingung kann als Tabellenbedingung oder als Spaltenbedingung angegeben werden. Eine Tabellenbedingung ist eine Integritätsbedingung, die für eine Spalte oder für eine Kombination von Spalten vereinbart wird. Bezieht sich die Integritätsbedingung auf nur eine Spalte, dann kann sie als Spaltenbedingung direkt bei der Definition der betreffenden Spalte angegeben werden.

Eine Integritätsbedingung hat einen Namen, der bei der Definition der Integritätsbedingung explizit vergeben werden kann oder implizit von SESAM/SQL vergeben wird. Falls eine Integritätsbedingung verletzt wird, erfolgt eine Meldung, in der auf diesen Namen Bezug genommen wird.

Wenn ein Benutzer eine neue Integritätsbedingung definiert, prüft SESAM/SQL, ob die Integritätsbedingung nicht durch schon bestehende Daten in der Datenbank verletzt wird. In diesem Fall wird die Definition der Integritätsbedingung abgewiesen. Ist die Tabelle leer, dann ist die Integritätsbedingung stets wahr.

SESAM/SQL kennt unterschiedliche Integritätsbedingungen:

Nicht-NULL-Bedingung

Die Nicht-NULL-Bedingung (NOT NULL) fordert, dass eine Spalte keine NULL-Werte enthalten darf. Sie kann nur als Spaltenbedingung angegeben werden.

Eindeutigkeitsbedingung

Die Eindeutigkeitsbedingung (UNIQUE) für eine Spalte fordert, dass in der angegebenen Spalte jeder vom NULL-Wert verschiedene Wert nur einmal vorkommen darf. Die Eindeutigkeitsbedingung für eine Spaltenkombination fordert, dass in der angegebenen Spaltenkombination jede Wertekombination, die keinen NULL-Wert enthält, nur einmal vorkommen darf.

Primärschlüsselbedingung

Die Primärschlüsselbedingung (PRIMARY KEY) legt eine Spalte oder eine Spaltenkombination als Primärschlüssel einer Tabelle fest. Die Primärschlüsselbedingung fordert, dass für die Spalte bzw. die Spaltenkombination die Eindeutigkeitsbedingung und die NichtNULL-Bedingung erfüllt sind.

Eine Tabelle darf nur einen Primärschlüssel besitzen. Der Primärschlüssel darf nicht vom Datentyp VARCHAR oder NVARCHAR sein.

Für CALL-DML-Tabellen darf nur die Primärschlüsselbedingung definiert werden.

Referenzbedingung

Die Referenzbedingung ([FOREIGN KEY]...REFERENCES) legt eine Spalte oder Spaltenkombination als Fremdschlüssel einer Tabelle fest. Der Fremdschlüssel bezieht sich auf eine oder mehrere Spalten einer anderen Tabelle. Für diese Spalten muss eine Eindeutigkeitsbedingung gelten. Die Tabelle, die den Fremdschlüssel enthält, wird referenzierende Tabelle genannt, die Tabelle, für deren Spalten die Eindeutigkeitsbedingung gelten muss, wird referenzierte Tabelle genannt. Anzahl und Datentypen der einander zugeordneten Spalten der referenzierenden und der referenzierten Tabelle müssen gleich sein. Bei der referenzierenden und der referenzierten Tabelle kann es sich auch um dieselbe Basistabelle handeln.

Ein Satz der referenzierenden Tabelle erfüllt die Referenzbedingung genau dann, wenn er entweder in einer der referenzierenden Spalten den NULL-Wert enthält, oder diese Werte alle ungleich NULL sind und es einen Satz der referenzierten Tabelle gibt, der in den referenzierten Spalten dieselben Werte enthält. Ist beim Einfügen eines Satzes oder Ändern von Spaltenwerten in der referenzierenden Tabelle oder beim Löschen und Ändern von Sätzen der referenzierten Tabelle die Referenzbedingung nicht erfüllt, dann weist SESAM/SQL diese Tabellenoperation ab.

Bei einspaltigen Fremdschlüsseln fordert die Referenzbedingung, dass jeder vom NULL-Wert verschiedene Wert des Fremdschlüssels einer Tabelle als Wert einer bestimmten Spalte in einer anderen Tabelle vorkommt, die der Eindeutigkeitsbedingung genügt.

Bei mehrspaltigen Fremdschlüsseln muss jede darin vorkommende Wertekombination, die keinen NULL-Wert enthält, in der entsprechenden Spaltenkombination der referenzierten Tabelle auftreten. Diese Spaltenkombination muss der Eindeutigkeitsbedingung genügen. In SQL genügt somit ein Satz schon der Referenzbedingung, wenn er in mindestens einer Spalte des mehrspaltigen Fremdschlüssels einen NULL-Wert enthält.

Werden nach REFERENCES keine Spalte bzw. keine Spalten für die referenzierte Tabelle angegeben, dann wird der Primärschlüssel der referenzierten Tabelle verwendet.

Check-Bedingung

Die CHECK-Bedingung fordert, dass jeder Wert einer Spalte bzw. jede Wertekombination von Spalten eine Suchbedingung erfüllt. Die Suchbedingung darf sich nur auf die Tabelle beziehen, zu der die Spalte bzw. die Spalten gehören und keine Unterabfrage oder Transliteration zwischen EBCDIC und Unicode enthalten. Außerdem darf die Suchbedingung keine Umwandlung von Großbuchstaben in Kleinbuchstaben oder von Kleinbuchstaben in Großbuchstaben enthalten, wenn die umzuwandelnde Zeichenkette eine Unicode-Zeichenkette ist. Da Integritätsbedingungen nicht von einer bestimmten Anwendung abhängig sein dürfen, darf keine Benutzervariable, keine Zeitfunktion und kein Spezial-Literal in der Suchbedingung angegeben werden. Die Suchbedingung darf keine multiple Spalte referenzieren..

Löschen von Integritätsbedingungen

Eine Primärschlüsselbedingung kann nur gelöscht werden, indem die betreffende Tabelle mit DROP TABLE gelöscht wird. Die übrigen Integritätsbedingungen können mit ALTER TABLE DROP CONSTRAINT gelöscht werden oder implizit beim Löschen einer Tabelle mit DROP TABLE.

Eine Eindeutigkeitsbedingung kann mit ALTER TABLE DROP CONSTRAINT RESTRICT nur dann gelöscht werden, wenn sie nicht die Eindeutigkeitsbedingung für die referenzierten Spalten einer Referenzbedingung ist.