Einschränkungen

Einschränkungen ermöglichen Ihnen das Definieren des Verfahrens, das Database Engine (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 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änkung chk_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 die part_sample-Tabelle und gibt das part_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 die order_part-Tabelle einen Fremdschlüssel ein, der auf die zuvor definierte part_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

Verweis

Andere Ressourcen