Eine Einschränkung (Einschränkung: Eine Beschränkung, die für den Wert gilt, der in eine Spalte oder eine Zeile eingegeben werden kann. Die Werte in der Spalte "Alter" dürfen z. B. nicht kleiner als 0 oder größer als 110 sein.) ist mit einem Index (Index: Ein Feature, das das Suchen und Sortieren in einer Tabelle basierend auf bestimmten Schlüsselwerten beschleunigt und die Eindeutigkeit für die Zeilen in einer Tabelle erzwingen kann. Der Primärschlüssel einer Tabelle wird automatisch indiziert. Einige Felder können aufgrund ihres Datentyps nicht indiziert werden.) zu vergleichen, kann jedoch auch zum Erstellen einer Beziehung (Beziehung: Eine Zuordnung zwischen allgemeinen Feldern (Spalten), die in zwei Tabellen vorkommen. Eine Beziehung kann vom Typ 1:1, 1:n oder n:n sein.) zu einer anderen Tabelle verwendet werden.
Mit der CONSTRAINT-Klausel können Sie in ALTER TABLE- und CREATE TABLE-Anweisungen Einschränkungen erstellen oder löschen. CONSTRAINT-Klauseln können entweder zum Erstellen einer Einschränkung für ein einzelnes Feld oder zum Erstellen einer Einschränkung für mehrere Felder verwendet werden.
Hinweis Das Microsoft Access-Datenbankmodul unterstützt bei anderen als Microsoft Access-Datenbanken die Verwendung von CONSTRAINT oder anderen DDL (Datendefinitionssprache) (Datendefinitionssprache (Data Definition Language, DDL): Die Sprache, mit der Datenbankattribute beschrieben werden, insbesondere Tabellen, Felder, Indizes und Speicherstrategie. ANSI definiert dies, um die Token CREATE, DROP und ALTER zu erhalten. DDL ist eine Untermenge von SQL (Structured Query Language).)-Anweisungen nicht. Verwenden Sie stattdessen die Create-Methoden von DAO (Datenzugriffsobjekte (Data Access Objects oder DAO): Eine Datenzugriffsschnittstelle, die zum Herstellen einer Verbindung sowie zum Abrufen, Bearbeiten und Aktualisieren von Daten und Datenbankstrukturen mit Microsoft Jet- und ODBC-kompatiblen Datenquellen kommuniziert.).
Syntax
Einschränkung für ein einzelnes Feld:
CONSTRAINT Name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES Fremdtabelle [(Fremdfeld1, Fremdfeld2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}
Einschränkung für mehrere Felder:
CONSTRAINT Name
{PRIMARY KEY (primär1[, primär2 [, ...]]) |
UNIQUE (eindeutig1[, eindeutig2 [, ...]]) |
NOT NULL (nichtNull1[, nichtNull2 [, ...]]) |
FOREIGN KEY [NO INDEX] (Bezug1[, Bezug2 [, ...]]) REFERENCES Fremdtabelle [(Fremdfeld1 [, Fremdfeld2 [, ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}
Die CONSTRAINT-Klausel besteht aus den folgenden Teilen:
| Teil |
Beschreibung |
| Name |
Der Name der Einschränkung, die erstellt werden soll. |
| primär1, primär2 |
Die Namen der Felder, die als Primärschlüssel (Primärschlüssel: Eines oder mehrere Felder [Spalten], die die einzelnen Datensätze in einer Tabelle eindeutig identifizieren. Ein Primärschlüssel lässt keine Null-Werte zu und muss immer einen eindeutigen Index haben. Ein Primärschlüssel wird verwendet, um eine Beziehung zwischen einer Tabelle und den Fremdschlüsseln in anderen Tabellen zu erstellen.) definiert werden sollen. |
| eindeutig1, eindeutig2 |
Die Namen der Felder, die als eindeutiger Schlüssel definiert werden sollen. |
| nichtNull1, nichtNull2 |
Die Namen der Felder, die auf Werte ungleich Null (Null: Ein Wert, den Sie in ein Feld eingeben oder in Ausdrücken und Abfragen verwenden können, um fehlende oder unbekannte Daten anzugeben. In Visual Basic steht das Schlüsselwort Null für einen Null-Wert. Einige Felder, wie Primärschlüsselfelder, dürfen keine Null-Werte enthalten.) eingeschränkt werden. |
| Bezug1, Bezug2 |
Der Name der Fremdschlüssel (Fremdschlüssel: Ein oder mehrere Tabellenfelder [Spalten], die auf das oder die Primärschlüsselfelder in einer anderen Tabelle verweisen. Ein Fremdschlüssel gibt an, wie die Tabellen verknüpft werden.)felder, die auf Felder in einer anderen Tabelle verweisen. |
| Fremdtabelle |
Der Name der Fremdtabelle (Fremdtabelle: Eine Tabelle (z. B. "Kundenbestellungen"), die ein Fremdschlüsselfeld (z. B. "Kunden-Code") enthält, das das Primärschlüsselfeld in einer anderen Tabelle (z. B."Kunden") in der Datenbank darstellt und das sich normalerweise auf der Seite "n" einer 1:n-Beziehung befindet.), die die in Fremdfeld angegebenen Felder enthält. |
| Fremdfeld1, Fremdfeld2 |
Die Namen der Felder in der Fremdtabelle, die durch Bezug1, Bezug2 angegeben sind. Sie können diese Klausel auslassen, wenn das Feld, auf das verwiesen wird, der Primärschlüssel der Fremdtabelle ist. |
Hinweise
Die Einschränkung für ein einzelnes Feld verwenden Sie in der Felddefinitionsklausel einer ALTER TABLE- oder CREATE TABLE-Anweisung unmittelbar nach der Definition des Datentyps für das Feld.
Eine Einschränkung für mehrere Felder verwenden Sie, wenn Sie das reservierte Wort (Reserviertes Wort: Ein zu einer Sprache, z. B. Visual Basic, gehörendes Wort. Reservierte Wörter enthalten die Namen von Anweisungen, vordefinierten Funktionen, Datentypen, Methoden, Operatoren und Objekten. CONSTRAINT außerhalb einer Felddefinitionsklausel in einer ALTER TABLE- oder CREATE TABLE-Anweisung verwenden.
Mit CONSTRAINT können Sie für ein Feld einen der folgenden Einschränkungstypen festlegen:
- Mit dem reservierten Wort UNIQUE können Sie ein Feld als eindeutigen Schlüssel definieren. Dies bedeutet, dass für zwei Datensätze in der Tabelle keine identischen Werte in diesem Feld zulässig sind. Jedes Feld bzw. alle Felder können als eindeutig festgelegt werden. Wenn eine Einschränkung für mehrere Felder als eindeutiger Schlüssel definiert wird, müssen die Werte aller Felder im Index eindeutig sein, selbst wenn zwei oder mehr Datensätze denselben Wert in nur einem der Felder aufweisen.
- Mit den reservierten Wörtern PRIMARY KEY können Sie ein Feld oder mehrere Felder in einer Tabelle als Primärschlüssel definieren. Alle Werte des Primärschlüssels müssen eindeutig und ungleich Null sein, und pro Tabelle ist nur ein einziger Primärschlüssel zulässig.
Hinweis Für eine Tabelle, in der bereits ein Primärschlüssel vorhanden ist, sollten Sie keine PRIMARY KEY-Einschränkung festlegen. Andernfalls tritt ein Fehler auf.
- Mit den reservierten Wörtern FOREIGN KEY können Sie ein Feld als Fremdschlüssel definieren. Wenn der Primärschlüssel der Fremdtabelle aus mehreren Feldern besteht, müssen Sie eine Einschränkung für mehrere Felder verwenden, in der alle Bezugsfelder, der Name der Fremdtabelle und die Namen der Felder in der Fremdtabelle, auf die verwiesen wird, in derselben Reihenfolge wie die Bezugsfelder aufgeführt sind. Wenn die Felder, auf die verwiesen wird, der Primärschlüssel der Fremdtabelle sind, müssen Sie diese Felder nicht angeben. Das Datenbankmodul verwendet diese Felder standardmäßig als Primärschlüssel der Fremdtabelle.
Fremdschlüsseleinschränkungen definieren bestimmte Aktionen, die ausgeführt werden sollen, wenn ein entsprechender Primärschlüsselwert geändert wird:
- Sie können Aktionen angeben, die in der Fremdschlüsseltabelle ausgeführt werden, wenn eine entsprechende Aktion für einen Fremdschlüssel in der Tabelle ausgeführt wird, für die die CONSTRAINT-Klausel definiert ist. Angenommen, die folgende Definition für die Customers-Tabelle (Kunden) liegt vor:
CREATE TABLE Kunden (Kunden-Code INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))
Angenommen, in der Orders-Tabelle (Bestellungen) ist eine Fremdschlüsselbeziehung definiert, die auf den Primärschlüssel der Customers-Tabelle (Kunden) verweist:
CREATE TABLE Bestellungen (Bestell-Nr INTEGER PRIMARY KEY, Kunden-Code INTEGER, Bemerkungen NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (Kunden-Code) REFERENCES Kunden ON UPDATE CASCADE ON DELETE CASCADE
Sowohl eine ON UPDATE CASCADE- als auch eine ON DELETE CASCADE-Klausel sind für den Fremdschlüssel definiert. Die ON UPDATE CASCADE-Klausel besagt, dass beim Aktualisieren einer Kunden-ID in der Customers-Tabelle (Kunden) die Aktualisierung an die Orders-Tabelle (Bestellungen) weitergegeben wird. Jede Bestellung, die eine entsprechende Kunden-ID enthält, wird automatisch mit dem neuen Wert aktualisiert. Die ON DELETE CASCADE-Klausel besagt, dass beim Löschen eines Kunden aus der Customers-Tabelle alle Zeilen in der Orders-Tabelle, die denselben Kunden-Code enthalten, ebenfalls gelöscht werden.
Angenommen, die Orders-Tabelle (Bestellungen) enthält eine andere Definition, in der die SET NULL-Aktion anstelle der CASCADE-Aktion verwendet wird:
CREATE TABLE Bestellungen (Bestell-Nr INTEGER PRIMARY KEY, Kunden-Code INTEGER, Bemerkungen NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (Kunden-Code) REFERENCES Kunden ON UPDATE SET NULL ON DELETE SET NULL
Die ON UPDATE SET NULL-Klausel besagt, dass beim Aktualisieren einer Kunden-ID in der Customers-Tabelle (Kunden) die entsprechenden Fremdschlüsselwerte in der Orders-Tabelle (Bestellungen) automatisch auf NULL festgelegt werden. Entsprechend besagt die ON DELETE SET NULL-Klausel, dass beim Löschen eines Kunden aus der Customers-Tabelle alle entsprechenden Fremdschlüssel in der Orders-Tabelle automatisch auf NULL festgelegt werden.
Um das automatische Erstellen von Indizes für Fremdschlüssel zu verhindern, kann der NO INDEX-Modifizierer verwendet werden. Diese Art der Fremdschlüsseldefinition sollte nur verwendet werden, wenn die sich ergebenden Indexwerte häufig dupliziert würden. In diesem Fall ist das Verwenden eines Indexes möglicherweise nicht so effizient wie das Ausführen eines Tabellenscans. Diese Art von Index, bei dem Zeilen in der Tabelle eingefügt und gelöscht werden, beeinträchtigt die Leistung und bietet keinerlei Vorteile.