Einschränkungen
Einschränkungen ermöglichen Ihnen das Definieren des Verfahrens, das SQL Server 2005-Datenbankmodul verwendet, um die Integrität einer Datenbank automatisch zu erzwingen. Einschränkungen definieren Regeln bezüglich der in Spalten zulässigen Werte und stellen den Standardmechanismus zum Erzwingen der Integrität dar. Das Verwenden von Einschränkungen sollte dem Verwenden von DML-Trigger, Regeln und Standardwerten vorgezogen werden. Der Abfrageoptimierer verwendet ebenfalls Einschränkungsdefinitionen, um leistungsfähige Abfrageausführungspläne zu erstellen.
Einschränkungsklassen
SQL Server 2005 unterstützt folgende Klassen von Einschränkungen:
NOT NULL gibt an, dass die Spalte keine NULL-Werte zulässt. Weitere Informationen finden Sie unter Zulassen von NULL-Werten.
Check-Einschränkungen erzwingen die Domänenintegrität, indem sie die Werte beschränken, die in eine Spalte eingefügt werden können. Weitere Informationen finden Sie unter CHECK-Einschränkungen.
Eine CHECK-Einschränkung gibt eine boolesche Suchbedingung an (diese wird zu TRUE, FALSE oder unknown ausgewertet), die auf alle Werte angewendet wird, die für die Spalte eingegeben werden. Alle Werte, für die die Auswertung FALSE ergibt, werden zurückgewiesen. Sie können für jede Spalte mehrere CHECK-Einschränkungen angeben. Das folgende Beispiel zeigt das Erstellen der Einschränkungchk_id
. Diese Einschränkung erzwingt außerdem die Domäne des Primärschlüssels, indem sichergestellt wird, dass für den Schlüssel nur Zahlen innerhalb eines angegebenen Bereichs eingegeben werden.CREATE TABLE cust_sample ( cust_id int PRIMARY KEY, cust_name char(50), cust_address char(50), cust_credit_limit money, CONSTRAINT chk_id CHECK (cust_id BETWEEN 0 and 10000 ) )
UNIQUE-Einschränkungen erzwingen die Eindeutigkeit der Werte in einer Gruppe von Spalten.
In einer UNIQUE-Einschränkung dürfen keine zwei Zeilen in der Tabelle denselben Wert für die Spalten aufweisen. Durch Primärschlüssel kann außerdem die Eindeutigkeit erzwungen werden, Primärschlüssel lassen jedoch keine NULL-Werte als einen der eindeutigen Werte zu. Weitere Informationen finden Sie unter UNIQUE-Einschränkungen.PRIMARY KEY-Einschränkungen identifizieren die Spalte oder eine Gruppe von Spalten, deren Werte eine Zeile in einer Tabelle eindeutig identifizieren. Weitere Informationen finden Sie unter PRIMARY KEY-Einschränkungen.
Derselbe Primärschlüsselwert darf nicht für mehrere Zeilen in einer Tabelle verwendet werden. Für keine Spalte eines Primärschlüssels darf ein NULL-Wert eingegeben werden. Es wird empfohlen, als Primärschlüssel eine Spalte mit kleinen ganzen Zahlen zu verwenden. Jede Tabelle sollte über einen Primärschlüssel verfügen. Eine Spalte oder Kombination von Spalten, die als Primärschlüsselwert dient, wird als Kandidatenschlüssel bezeichnet.
Das folgende Beispiel erstellt diepart_sample
-Tabelle und gibt daspart_nmbr
-Feld als Primärschlüssel an.CREATE TABLE part_sample (part_nmbr int PRIMARY KEY, part_name char(30), part_weight decimal(6,2), part_color char(15) );
FOREIGN KEY-Einschränkungen geben die Beziehungen zwischen Tabellen an und erzwingen diese. Weitere Informationen finden Sie unter FOREIGN KEY-Einschränkungen.
Ein Fremdschlüssel in einer Tabelle zeigt auf einen Kandidatenschlüssel in einer anderen Tabelle. Im folgenden Beispiel richtet dieorder_part
-Tabelle einen Fremdschlüssel ein, der auf die zuvor definiertepart_sample
-Tabelle verweist.CREATE TABLE order_part (order_nmbr int, part_nmbr int FOREIGN KEY REFERENCES part_sample(part_nmbr) ON DELETE NO ACTION, qty_ordered int); GO
Sie können keine Zeile mit einem Fremdschlüsselwert einfügen (ausgenommen NULL), wenn kein Kandidatenschlüssel mit diesem Wert vorhanden ist. Die ON DELETE-Klausel steuert die durchzuführenden Aktionen, wenn Sie versuchen, eine Zeile zu löschen, auf die vorhandene Fremdschlüssel zeigen. Die ON DELETE-Klausel besitzt die folgenden Optionen:
- NO ACTION gibt an, dass das Löschen zu einem Fehler führt.
- CASCADE gibt an, dass alle Zeilen mit Fremdschlüsseln, die auf die gelöschte Zeile zeigen, ebenfalls gelöscht werden.
- SET NULL gibt an, dass alle Zeilen mit Fremdschlüsseln, die auf die gelöschte Zeile zeigen, auf NULL festgelegt werden.
- SET DEFAULT gibt an, dass für alle Zeilen mit Fremdschlüsseln, die auf die gelöschte Zeile zeigen, der Standardwert festgelegt wird. Weitere Informationen finden Sie unter Standardwerte.
Die ON UPDATE-Klausel definiert die durchzuführenden Aktionen, wenn Sie versuchen, einen Kandidatenschlüsselwert zu aktualisieren, auf den vorhandene Fremdschlüssel zeigen. Diese Klausel unterstützt außerdem die Optionen NO ACTION, CASCADE, SET NULL und SET DEFAULT.
Spalten- und Tabelleneinschränkungen
Bei Einschränkungen kann es sich um Spalten- oder Tabelleneinschränkungen handeln. Eine Spalteneinschränkung wird als Teil einer Spaltendefinition angegeben und gilt nur für diese Spalte. Die Einschränkungen in den vorangegangenen Beispielen sind Spalteneinschränkungen. Eine Tabelleneinschränkung wird unabhängig von einer Spaltendefinition deklariert und kann für mehrere Spalten in einer Tabelle gelten. Tabelleneinschränkungen müssen verwendet werden, wenn mehrere Spalten in eine Einschränkung eingeschlossen werden muss.
Wenn in einer Tabelle z. B. zwei oder mehr Spalten für den Primärschlüssel verwendet werden, müssen Sie eine Tabelleneinschränkung verwenden, um beide Spalten in den Primärschlüssel einzuschließen. Stellen Sie sich eine Tabelle vor, die Ereignisse aufzeichnet, die auf einem Computer in einer Fabrik eintreten. Nehmen Sie weiterhin an, dass unterschiedliche Ereignistypen gleichzeitig eintreten können, dass jedoch nie zwei Ereignisse desselben Typs gleichzeitig eintreten. Dieser Sachverhalt kann in der Tabelle erzwungen werden, indem Sie die event_type
- und die event_time
-Spalte in einen Primärschlüssel einschließen, der zwei Spalten umfasst. Das folgende Beispiel zeigt diese Vorgehensweise.
CREATE TABLE factory_process
(event_type int,
event_time datetime,
event_site char(50),
event_desc char(1024),
CONSTRAINT event_key PRIMARY KEY (event_type, event_time) )
Siehe auch
Andere Ressourcen
CREATE TABLE (Transact-SQL)
Erzwingen der Datenintegrität