CONSTRAINT

Mit Constraints (deutsch „Zwangsbedingungen“) werden in diversen Programmiersprachen bzw. Datenbanken Bedingungen definiert, die zwingend vom Wert einer Variablen erfüllt werden müssen, damit der Wert ins System übernommen werden kann.

Das Keywort CONSTRAINTS gehören zum CREATE-TABLE-Befehl und erzwingen Integritätsbedingungen auf den Daten der Tabelle.

Man unterscheidet folgende CONSTRAINTs:

NULLlegt fest, dass eine Spalte NULL sein kann (optionale Eingabe, default).
NOT NULLlegt fest, dass eine Spalte nicht NULL sein kann (Pflichteingabe).
UNIQUEbestimmt eine oder mehrere Spalten als eindeutigen Schlüssel. Die Werte dieser Schlüsselspalten sind immer eindeutig. Mehrere Unique Keys sind je Tabelle definierbar. Für die Schlüsselspalten wird automatisch ein Index angelegt. Es wird so das relationale Konzept der Zweitschlüssel implementiert.
PRIMARY KEYbestimmt eine oder mehrere Spalten als Primärschlüssel.Die Werte dieser Schlüsselspalten sind immer eindeutig und dürfen nicht NULL sein (implizite NOT NULL-Bedingung). Maximal ist ein Primärschlüssel je Tabelle definierbar. Für die Primärschlüsselspalten wird automatisch ein eindeutiger Index angelegt.
FOREIGN KEYbestimmt eine oder mehrere Spalten als Fremdschlüssel, die Primärschlüssel in einer anderen Tabelle sind und damit der referentiellen Integrität? genügen müssen. Foreign Keys realisieren 1:n Beziehungen aus dem ER-Modell. Es ist das einziges Constraint mit Fehlerkorrektur-Möglichkeit. Für Fremdschlüssel, die als Tabellenbedingung spezifiziert werden, muss die umfangreichere FOREIGN KEY-Syntax verwendet werden.
REFERENCES-Klauselidentifiziert die Master-Tabelle der Fremdschlüsselbeziehung. Werden keine Spalten angegen, so werden automatisch die Primärschlüsselspalten der Master-Tabelle referenziert. Die Klausel gehört zum FOREIGN-KEY-Constraint. Als Spaltenbedingung ist diese Syntax ausreichend für die Definition eines Fremdschlüssels.
CHECKlegt eine Bedingung fest, die jeder Datensatz der Tabelle erfüllen muss. Bei ORACLE und DB/2 sind nur sehr eingeschränkte Suchbedingungen formulierbar, wie Vergleiche mit Konstanten bzw. zwischen zwei Spalten der zugehörigen Tabelle. Es sind hier nicht wie im Standard-SQL SELECT-Anfragen auf andere Tabellen möglich. Es ist noch nicht einmal möglich, in einem CHECK-CONSTRAINT die Systemvariable SYSDATE zu verwenden.

Constraints gehören zu der Tabelle, für die sie mittels CREATE TABLE- oder ALTER TABLE-Befehl definiert wurden. Sie sind keine eigenständigen DB-Objekte. Wird die Tabelle gelöscht, werden auch automatisch alle zugehörigen Constraints gelöscht. Ein einzelnes Constraint wird mittels ALTER TABLE xyz DROP CONSTRAINT constraint_name gelöscht.

Bis auf das NOT NULL-Constraint, welches ja nur als Spaltenbedingung formulierbar ist, können alle übrigen Constraints in der CREATE- bzw. ALTER TABLE-Anweisung an zwei verschiedenen Stellen spezifiziert werden, woraus sich zwei recht unterschiedliche Syntax-Vorgaben ergeben:

Für die Constraints PRIMARY KEY, UNIQUE, NOT NULL, CHECK stellt die Fehlermeldung und das Zurückrollen zum Anfang der Transaktion bei verzögert geprüften Constraints bzw. bis vor die aktuelle, fehlerverursachende Datenmanipulation bei unmittelbar geprüften die einzig mögliche Reaktion auf einen Integritätsfehler dar je nach Prüfungszeitpunkt bzw. bis vor die aktuelle DML-Anweisung. Lediglich beim FOREIGN KEY-Constraint besteht die Möglichkeit, vordefinierte Fehlerkorrektur-Aktionen auszuwählen. Freiprogrammierbare Fehlerkorrekturen sind nicht vorgesehen. (vgl. Integritätsprüfung)

Bei Oracle müssen die CONSTRAINTS mit einem Namen bezeichnet werden, sonst vergibt das DBMS einen systemeigenen Namen.

siehe auch Datenkonsistenz (Transaktion), Integritätsart, Fehlerkorrektur, Integritätsprüfung, TRIGGER, SET-CONSTRAINTS

Quellen:

  • ANSI/ISO/IEC 9075-1:2003. Part 1 "SQL/Framework", ISO International Organization for Standardization / ANSI American National Standards Institute, September 2003
  • ANSI/ISO/IEC 9075-2:2003. Part 2 "SQL/Foundation", ISO International Organization for Standardization / ANSI American National Standards Institute, Dezember 2003
  • Elmasri, Ramez/Navathe, Shamkant B.: "Grundlagen von Datenbanksystemen" , Pearson Studium, München, 2002, ISBN 3-8273-7021-3
  • Faeskorn-Woyke, Heide/Bertelsmeier, Birgit/Riemer, Petra/Bauer, Elena: "Datenbanksysteme - Theorie und Praxis mit SQL2003, Oracle und MySQL", Pearson Education, München, 2007, ISBN 978-3-8273-7266-6
  • Kemper, Alfons/Eickler, André: "Datenbanksysteme", Oldenbourg, München, 2009, 978-3-486-59018-0
  • Melton, Jim/Simon, Alan R.: "SQL: 1999 - Understanding Relational Language Components", Morgan Kaufmann, San Francisco, 2001, ISBN 1558604561
  • Oracle® Database SQL Language Reference 11g Release 2 (11.2), E17118-03, August 2010, http://download.oracle.com/docs/cd/E11882_01/server.112/e17118.pdf
  • Saake, Gunter/Sattler, Kai-Uwe/Heuer, Andreas: "Datenbanken - Konzepte und Sprachen", mitp-Verlag, Redline GmbH, Heidelberg, 2007, ISBN 3-8266-1664-2
  • Vossen, Gottfried: "Datenmodelle, Datenbanksprachen und Datenbankmanagementsysteme", Oldenbourg, München, 2008, ISBN 978-3-486-27574-2

Kategorie: SQL, C