Check constraint (Prüfbeschränkung)

<< Charset / Zeichensatz | IBExpert Glossar | Collation / Sortierung >>

Check constraint (Prüfbeschränkung)

Ein Check Constraint (Prüfbeschränkung) ist eine Datenbankprüfung, die die Integrität der Daten in der Tabelle untereinander sicher stellt. Eine Prüfbeschränkung kann automatisch ausgeführt werden, und so durch Testen vor Speicherung in der Datenbank die Integrität der Dateninhalte sicher zustellen.

Die Option Check Constraint (Prüfbeschränkung) ermöglicht es, jeden Datensatz auf Gültigkeit der nach dem Check Constraint stehenden Expressions in Klammern zu überprüfen. Check Constraints in Tabellen sind identisch mit Check Constraints in Domänen.

Eine Prüfbeschränkung kann für jede Spalte in einer Tabelle festgelegt werden, um den oben beschriebenen Mechanismus zu garantieren. Es umfasst ein Expression der wahr sein muss, sodass Datensätze nach einer Eingabe oder Aktualisierung geschrieben werden kann. Die Feldinhalte müssen in den zulässigen Werten enthalten sein, welche in einer Liste festgelegt werden können. Es ist ebenfalls möglich, den Wert für einen minimalen oder maximalen Wert zu testen. Desweiteren kann der Wert verglichen werden mit Werten in anderen Spalten, um die Abhängigkeiten zu testen.

Eine Prüfbeschränkung kann nur Werte in aktuellen Datensätzen überprüfen. Wenn simultan mehrere Datensätze eingegeben oder geändert werden, kann eine Prüfbeschränkung lediglich die Datenintegrität in einem Datensatzlevel zur Zeit garantieren.

Wenn andere Datensätze in der Prüfung refernziert werden, könnte dies von anderen Benutzern zum Zeitpunkt der Eingabe modifiziert worden sein und daher möglicherweise ungültig geworden sein, auch wenn die Prüfbeschränkung den Datensatz bestätigt hat. Zum Zeitpunkt der Gültigkeitsprüfung werden andere Daten nur zur Prüfung gelesen. Aus diesem Grund bleiben die Werte der aktuellen Operationssequenz konstant, auch wenn andere Benutzer einen Wert, der bereits zur Gültigkeitsprüfung referenziert wurde, modifiziert haben.

Eine Prüfbeschränkung kann direkt beim Erzeugen der Tabelle erzeugt werden. Wenn eine Prüfbeschränkung erzeugt wird, sollten folgende Kriterien in Betracht gezogen werden:

  • Eine Prüfbeschränkung (Check Constraint) kann keine Domäne referenzieren.
  • Eine Tabellenspalte kann nur eine Prüfbeschränkung enthalten.
  • Eine Prüfbeschränkung, die von einer Domäne definiert wurde, kann nicht von einer lokalen Prüfbeschränkung überschrieben werden. Es können jedoch zusätzliche Beschränkungen festgelegt werden.

In einer Prüf-(Check-)definition repräsentiert das Schlüsselwort VALUE den Wert der entsprechenden Tabellenspalte. Die Wertprüfung wird generell bei Eingabe oder Aktualisierung dieser Tabellenspalte vorgenommen. Die Prüfwert-Optionen ermöglichen diverse Operationen (eine vollständige Liste möglicher Operatoren finden Sie unter Comparison Operators (Vergleichsoperatoren)).

Referentiale Integritäts-Deklarationen und Primärschlüssel-Definitionen sind spezielle Prüfbschränkungs-(Check Constraints) Kompositionen.

Es ist nur eine Beschränkung pro Spalte erlaubt. Wenn die Spalte auf einer Domäne basiert, die eine Beschränkung enthält, sind beide Prüfbeschränkungen aktiv.

Die Festlegung des Schlüsselwortes CONSTRAINT und des Namens sind optional für alle Beschränkungen. Wenn kein Name festgelegt wurde, erzeugt Firebird/InterBase® automatisch einen. Alle Beschränkungsnamen werden in einer Systemtabelle namens DB$RELATION_CONSTRAINTS gespeichert.

Es ist lediglich notwendig, Beschränkungen zu benennen, wenn später mit der Anweisung ALTER TABLE DROP deaktiviert werden sollen.

Bitte beachten Sie, dass wenn Sie den CHECK Constraint (Prüfbeschränkung) für eine Domäne ändern, für die bereits eine Beschränkung definiert ist, muss die vorhandene Beschränkung erst gelöscht werden und dann die neue ergänzt werden. ADD CHECK ersetzt nicht die aktuelle Beschränkung mit der neuen. Es ist also wichtig, zu wissen, dass die Änderung eines CHECK Constraints (Prüfbeschränkung) keine erneute Prüfung der Zeilen auf Ihre Gültigkeit; CHECK Constraints werden nur gültig, wenn ein INSERT oder UPDATE vollzogen wird. Ein Weg diese Einschränkung zu umgehen ist, eine UPDATE-Abfrage per Dummy-Operation durchzuführen. Wenn vorhandene Zeilen gegen einen CHECK Constraint verstoßen, schlägt die Abfrage fehl. Diese Zeilen können durch einen SELECT extrahiert werden.

zurück zum Seitenanfang

Check Constraints (Prüfbeschränkungen) und NULLs

Wenn ein CHECK Constraint zu NULL führt, nehmen Firebird Versionen vor 2.0 die Eingabe nicht an. Dem SQL Standard folgend, lassen RFirebird 2.0 NULL zu und erachten die Prüfung als fehlgeschlagen, falls das Ergebnis falsch ist.

Diese Änderung kann das Verhalten vorhandener Datenbanken verändern, wenn diese zu Firebird 2.0+ migriert werden. Überprüfen Sie ihre CREATE/ALTER TABLE-Anweisungen gründlich und fügen Sie and XXX is not null Prädikate zu Ihren CHECKs hinzu, falls diese weiterhin NULL-Eingaben nicht annehmen.

Weiteres finden Sie im Kapitel Firebird 2.0 Language Reference Upate, CHECK accepts NULL outcome.

zurück zum Seitenanfang
<< Charset / Zeichensatz | IBExpert Glossar | Collation / Sortierung >>