7.3.4 Domain Integrität – Prüfen mit CHECK
In den nächsten beiden Abschnitten wird es um die Darstellung der
Domain-Integritätsbedingungen in SQL gehen. Wir beginnen mit dem
CHECK
-Constraint. Es erlaubt einen beliebigen Ausdruck anzugeben,
den jeder Wert einer Spalte erfüllen muss.
Leider funktioniert das CHECK
nicht in MySQL, so dass dieser
Abschnitt nur theoretisch sein wird.
Nehmen wir unser Beispiel der Mitarbeitertabelle. Es dürfte sinnvoll sein zu verhindern, dass versehentlich
Bruttolöhne von mehr als 10.000 Euro eingegeben werden.
Um den Wertebereich eines Attributes einzuschränken, kennt SQL das Sprachelement CHECK
.
CHECK
wird wie bei den anderen beiden Integritätsbedingungen
auch durch das Schlüsselwort CONSTRAINT
und eine Bezeichnung für diese Einschränkung eingeleitet. Darauf folgt das Wort
CHECK
und dann die Bedingung, die bei Einfügen eines Satzes in
die Tabelle der Datenbank erfüllt sein muss.
Für das Beispiel Bruttolohn sähe das dann wie folgt aus (Sie können es ausprobieren, die SQL - Anweisung wird auch korrekt ausgeführt, nur leider funktioniert der 'check' nicht, sie können auch Bruttolöhne über 10.000 Euro eintragen.):
CREATE TABLE mitarbeiter ( personal_ID CHAR(4) NOT NULL, name VARCHAR(30) NOT NULL, strasse VARCHAR(50) NOT NULL, plz VARCHAR(5) NULL DEFAULT '00000', geburtsdatum DATE NULL DEFAULT '0000-00-00', bruttolohn real NOT NULL DEFAULT 0, CONSTRAINT primaryKey_mitarbeiter PRIMARY KEY (personal_ID), CONSTRAINT foreignKey_mitarbeiter FOREIGN KEY (plz) REFERENCES ort(plz) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT pruefe_bruttolohn CHECK (bruttolohn <= 10000) ) ENGINE=INNODB
Spätestens an dieser Stelle muss darauf hingewiesen werden, dass man viele Constraints wie CHECK
oder PRIMARY KEY
auch kürzer notieren kann. Dabei entfällt jedoch die Angabe einer Bezeichnung
für die Einschränkung, mit welcher Fehlermeldungen eindeutiger werden und die es erlaubt auf den Constraint zu
verweisen, wenn er geändert oder gelöscht werden soll.
Bei der verkürzten Form erfolgt die Definition der Einschränkung direkt in der Zeile der Spaltendefinition
und zwar hinter dem Datentyp.
Im Falle des CHECK
-Constraints besteht diese dann nur noch aus dem Schlüsselwort CHECK
gefolgt von dem Ausdruck in Klammern, der die Bedingung festlegt.
... bruttolohn real NOT NULL DEFAULT 0 CHECK (bruttolohn <= 10000), ...
Constraints die man auch so definieren kann nennt man Spalten-Constraint, während die bisher verwendeten
Tabellen-Constraints sind, weil sie getrennt von den Spaltendefinitionen geschrieben wurden.
Spalten-Constraints können auch als Tabellen-Constraints geschrieben werden, aber umgekehrt ist das nicht immer
möglich.