Bei der Erzeugung oder Änderung einer Basistabelle (CREATE TABLE, ALTER TABLE) können Tabellenbedingungen angegeben werden. Eine Tabellenbedingung ist eine Integritätsbedingung, die sich auf mehr als eine Spalte der Basistabelle beziehen kann. Keine der Spalten darf eine multiple Spalte sein.
Für CALL-DML-Tabellen darf nur die Integritätsbedingung PRIMARY KEY definiert werden.
tabellenbedingung ::=
{
UNIQUE (
spalte ,...) |
PRIMARY KEY (
spalte ,...) |
FOREIGN KEY (
spalte ,...) REFERENCES
tabelle [(
spalte ,...)] |
CHECK (
suchbedingung )
}
UNIQUE (spalte,...)
Eindeutigkeitsbedingung.
Die Kombination der Werte der angegebenen Spalten muss innerhalb der Tabelle eindeutig sein, falls alle Werte ungleich dem NULL-Wert sind.
Die Länge der Spalten muss die Einschränkungen erfüllen, die für einen Index gelten (siehe CREATE INDEX-Anweisung auf "CREATE INDEX - Index erzeugen").
Eine Spalte darf nicht mehrfach in der Spaltenliste genannt werden.
Die Reihenfolge der Spalten in der Spaltenliste muss sich unterscheiden von der Reihenfolge der Spalten in der Spaltenliste, die ggf. für eine andere UNIQUE Bedingung bzw. für eine PRIMARY KEY Bedingung derselben Tabelle angegeben wird.
PRIMARY KEY (spalte,...)
Primärschlüsselbedingung.
Die angegebenen Spalten bilden zusammen den Primärschlüssel der Tabelle. Die Kombination der Spaltenwerte muss eindeutig sein. Für jede Tabelle kann nur ein Primärschlüssel definiert werden.
Keine der Spalten darf vom Datentyp VARCHAR oder NVARCHAR sein. Die Summe der Spaltenlängen darf höchstens 256 Zeichen betragen.
Eine Spalte darf nicht mehrfach in der Spaltenliste genannt werden.
Die Reihenfolge der Spalten in der Spaltenliste muss sich unterscheiden von der Reihenfolge der Spalten in der Spaltenliste, die ggf. für eine andere UNIQUE Bedingung derselben Tabelle angegeben wird.
Für Primärschlüsselspalten gilt implizit auch die Nicht-NULL-Bedingung.
FOREIGN KEY ... REFERENCES
Referenzbedingung.Die referenzierenden Spalten dürfen eine Wertekombination, die keinen NULL-Wert enthält, nur dann enthalten, wenn die Wertekombination in den referenzierten Spalten ebenfalls vorkommt.Sie müssen die gleiche Anzahl Spalten der referenzierenden und der referenzierten Tabelle angeben. Die Datentypen der korrespondierenden Spalten müssen genau gleich sein.
Der aktuelle Berechtigungsschlüssel muss das Privileg REFERENCES für die referenzierten Spalten besitzen.
FOREIGN KEY (spalte,...)
Spalten der referenzierenden Tabelle, deren Wertekombination in der referenzierten Basistabelle enthalten sein soll.
Eine Spalte darf nicht mehrfach in der Spaltenliste genannt werden.
REFERENCES tabelle
Name der referenzierten Basistabelle.
Die referenzierte Basistabelle muss eine SQL-Tabelle sein. Der einfache Name der referenzierten Basistabelle kann durch einen Datenbank- und Schemanamen qualifiziert werden. Der Katalogname muss mit dem Datenbanknamen der referenzierenden Tabelle übereinstimmen.
(spalte,...)
Namen der referenzierten Spalten.
Für diese Spalten muss eine Eindeutigkeits- oder Primärschlüsselbedingung definiert sein, die dieselben Spalten und dieselbe Reihenfolge verwendet. Keine der Spalten darf eine multiple Spalte sein.
Eine Spalte darf nicht mehrfach in der Spaltenliste genannt werden.
(spalte,...) nicht angegeben:
Der Primärschlüssel der referenzierten Tabelle wird als referenzierte Spalte verwendet.
CHECK (suchbedingung)
Check-Bedingung.
Für jeden Datensatz der Tabelle muss die Suchbedingung suchbedingung den Wahrheitswert wahr oder unbestimmt annehmen, nicht jedoch den Wahrheitswert falsch.
Für suchbedingung gelten folgende Einschränkungen:
suchbedingung darf keine Benutzervariablen enthalten.
suchbedingung darf keine Mengenfunktion enthalten.
suchbedingung darf keine Unterabfrage enthalten, also kann sich suchbedingung nur auf Spalten der Tabelle beziehen, zu der die Spaltenbedingung gehört.
suchbedingung darf keine Zeitfunktion enthalten.
suchbedingung darf kein Spezial-Literal enthalten.
suchbedingung darf keine Transliteration zwischen EBCDIC und Unicode enthalten.
suchbedingung darf keine Umwandlung von Großbuchstaben in Kleinbuchstaben oder von Kleinbuchstaben in Großbuchstaben enthalten, wenn die umzuwandelnde Zeichenkette eine Unicode-Zeichenkette ist.
suchbedingung darf keine User Defined Function (UDF) enthalten.
Besonderheiten für CALL-DML-Tabellen
Bei Tabellenbedingungen müssen für CALL-DML-Tabellen folgende Einschränkungen berücksichtigt werden:
Eine CALL-DML-Tabelle muss genau eine Primärschlüsselbedingung als Spaltenbedingung oder als Tabellenbedingung enthalten.
Als Tabellenbedingung ist nur PRIMARY KEY erlaubt.
Der Datentyp einer Spalte des PRIMARY KEY muss CHAR, NUMERIC, INTEGER oder SMALLINT sein. Beim Datentyp NUMERIC sind keine Nachkommastellen erlaubt.
Die Summe der Spaltenlängen muss zwischen 4 und 256 Zeichen liegen.
Die Tabellenbedingung definiert einen zusammengesetzten Primärschlüssel. Der Name entspricht dem verbalen Attributnamen des zusammengesetzten Primärschlüssels in SESAM/SQL V1.x.
Tabellenbedingung und Index
Wenn Sie eine Eindeutigkeitsbedingung definieren, wird dafür ein Index mit den bei UNIQUE angegebenen Spalten verwendet:
Wenn Sie mit CREATE INDEX bereits einen Index definiert haben, der dieselben Spalten enthält, so wird dieser Index zusätzlich für die Eindeutigkeitsbedingung verwendet.
Sonst wird der benötigte Index implizit erzeugt. Der Name des implizit erzeugten Index beginnt mit UI, gefolgt von einer 16-stelligen Nummer.
Der Index wird im Space der Basistabelle gespeichert. Bei einer partitionierten Tabelle wird der Index im Space der ersten Partition der Tabelle gespeichert.
Beispiel für Tabellenbedingung
Das Beispiel zeigt einen Ausschnitt aus der CREATE TABLE-Anweisung, die die Tabelle KUNDE der Datenbank AUFTRAGKUNDEN erzeugt.
CREATE TABLE kunde ... CONSTRAINT plausplz CHECK ((land = 'D' AND plz >= 00000) OR (land <> 'D')) ... |