Articles

Definieren von Einschränkungen in CREATE TABLE in Oracle 12c

Mit der Anweisung CREATE TABLE können Sie verschiedene Arten von Einschränkungen für eine Tabelle erzwingen: Kandidatenschlüssel, Primärschlüssel, Fremdschlüssel und Prüfbedingungen. Eine CONSTRAINT-Klausel kann eine einzelne Spalte oder eine Gruppe von Spalten in einer Tabelle einschränken. Der Sinn dieser Einschränkungen besteht darin, Oracle dazu zu bringen, den größten Teil der Arbeit zur Aufrechterhaltung der Integrität Ihrer Datenbank zu erledigen. Je mehr Einschränkungen Sie einer Tabellendefinition hinzufügen, desto weniger Arbeit müssen Sie in Anwendungen ausführen, um die Daten zu verwalten. Je mehr Einschränkungen in einer Tabelle vorhanden sind, desto länger dauert es, die Daten zu aktualisieren.

Sie können Einschränkungen auf zwei Arten angeben: als Teil der Spaltendefinition (als Spaltenbeschränkung bezeichnet) oder am Ende der Anweisung CREATE TABLE (als Tabellenbeschränkung bezeichnet). Klauseln, die mehrere Spalten einschränken, müssen Tabelleneinschränkungen sein.

Der Kandidatenschlüssel

Ein Kandidatenschlüssel ist eine Kombination aus einer oder mehreren Spalten, deren Werte jede Zeile einer Tabelle eindeutig identifizieren. Die folgende Auflistung zeigt die Erstellung einer EINDEUTIGEN Einschränkung für die Fehlertabelle:

Der Schlüssel für diese Tabelle ist die Kombination von CITY und SAMPLE_DATE. Beachten Sie, dass beide Spalten ebenfalls als NOT NULL deklariert werden. Für diese Funktion müssen Sie Werte für bestimmte Spalten angeben, damit Zeilen eingefügt werden können. Natürlich sind Temperatur- und Niederschlagsinformationen nicht nützlich, ohne zu wissen, wo oder wann sie gesammelt wurden. Diese Technik ist für Spalten üblich, die der Primärschlüssel der Tabelle sind, aber sie ist auch nützlich, wenn bestimmte Spalten für die Aussagekraft der Datenzeile entscheidend sind. Wenn NOT NULL nicht angegeben ist, kann die Spalte Nullwerte haben.

Wenn Sie eine EINDEUTIGE Einschränkung erstellen, erstellt Oracle einen eindeutigen Index, um die Eindeutigkeit der Werte zu erzwingen. Innerhalb einer Primärschlüsseleinschränkung muss mindestens eine der Spalten im Primärschlüssel für jede Zeile UNGLEICH NULL sein.

Der Primärschlüssel

Der Primärschlüssel einer Tabelle ist einer der Kandidatenschlüssel, denen Sie einige besondere Merkmale geben. Sie können nur einen Primärschlüssel haben, und eine Primärschlüsselspalte darf keine NULLEN enthalten.

Die folgende CREATE TABLE-Anweisung hat den gleichen Effekt wie die vorherige, außer dass Sie mehrere EINDEUTIGE Einschränkungen, aber nur eine Primärschlüsseleinschränkung haben können:

Für einspaltige Primär- oder Kandidatenschlüssel können Sie den Schlüssel für die Spalte mit einer Spaltenbeschränkung anstelle einer Tabelleneinschränkung definieren:

In diesem Fall ist die Spalte AUTHOR_NAME der Primärschlüssel, und Oracle generiert einen Namen für die Primärschlüsseleinschränkung. Dies wird nicht empfohlen, wenn Sie einen allgemeinen Benennungsstandard für Schlüssel erzwingen möchten, wie später in „Benennungseinschränkungen“ erläutert.“

Indextabellenräume bezeichnen

EINDEUTIGE und Primärschlüsseleinschränkungen erstellen Indizes. Sofern Sie Oracle nichts anderes mitteilen, werden diese Indizes in Ihrem Standard-Tablespace abgelegt. Um einen anderen Tablespace anzugeben, verwenden Sie die USING INDEX TABLESPACE-Klausel des Befehls CREATE TABLE, wie in der folgenden Auflistung gezeigt:

Der Index, der der Primärschlüsseleinschränkung AUTHOR_PK zugeordnet ist, wird im Tablespace USERS platziert.

HINWEIS

In den meisten Standardinstallationen wird der BENUTZER-Tablespace erstellt und ist der Standard-Tablespace.

Der Fremdschlüssel

Ein Fremdschlüssel ist eine Kombination von Spalten mit Werten, die auf den Primärschlüsselwerten aus einer anderen Tabelle basieren. Eine Fremdschlüsseleinschränkung, auch als referenzielle Integritätseinschränkung bezeichnet, gibt an, dass die Werte des Fremdschlüssels den tatsächlichen Werten des Primärschlüssels in der anderen Tabelle entsprechen. In der Tabelle BOOKSHELF bezieht sich die Spalte CATEGORY_NAME beispielsweise auf Werte für die Spalte CATEGORY_NAME in der Tabelle CATEGORY:

Sie können auf einen primären oder eindeutigen Schlüssel verweisen, auch in derselben Tabelle. In der REFERENCES-Klausel können Sie jedoch nicht auf eine Tabelle in einer entfernten Datenbank verweisen. Sie können das Tabellenformular (das früher zum Erstellen eines PRIMÄRSCHLÜSSELS für die Haupttabelle verwendet wurde) anstelle des Spaltenformulars verwenden, um Fremdschlüssel mit mehreren Spalten anzugeben.

Manchmal möchten Sie diese abhängigen Zeilen löschen, wenn Sie die Zeile löschen, von der sie abhängen. Wenn Sie im Fall von BOOKSHELF und CATEGORY einen CATEGORY_NAME aus CATEGORY löschen, möchten Sie möglicherweise die entsprechenden Spaltenwerte für BOOKSHELF CATEGORY_NAME auf NULL setzen. In einem anderen Fall möchten Sie möglicherweise die gesamte Zeile löschen. Die der REFERENCES-Klausel hinzugefügte Klausel ON DELETE weist Oracle an, die abhängige Zeile zu löschen, wenn Sie die entsprechende Zeile in der übergeordneten Tabelle löschen. Diese Aktion behält automatisch die referenzielle Integrität bei.

Die CHECK-Einschränkung

Viele Spalten müssen Werte haben, die innerhalb eines bestimmten Bereichs liegen oder bestimmte Bedingungen erfüllen. Mit einer CHECK-Einschränkung können Sie einen Ausdruck angeben, der für jede Zeile in der Tabelle immer true sein muss. Um die verfügbaren Werte über die durch die Spaltendefinition erzwungenen Grenzen hinaus einzuschränken, können Sie eine Prüfeinschränkung verwenden, wie in der folgenden Auflistung gezeigt:

Eine Prüfeinschränkung auf Spaltenebene kann nicht auf Werte in anderen Zeilen verweisen. Es können keine Pseudospalten wie SYSDATE, USER, CURRVAL, NEXTVAL, LEVEL und ROWNUM verwendet werden. Sie können das Tabelleneinschränkungsformular (im Gegensatz zum Spalteneinschränkungsformular) verwenden, um auf mehrere Spalten in einer Prüfeinschränkung zu verweisen.

Constraints benennen

Sie können Ihre Constraints benennen. Wenn Sie ein effektives Benennungsschema für Ihre Einschränkungsnamen verwenden, können Sie die Einschränkungen besser identifizieren und verwalten. Der Name einer Einschränkung sollte die Tabelle identifizieren, auf die sie einwirkt, und den Typ der Einschränkung, die sie darstellt. Der Primärschlüssel in der TROUBLE-Tabelle könnte beispielsweise TROUBLE_PK heißen.

Sie können einen Namen für eine Einschränkung angeben, wenn Sie die Einschränkung erstellen. Wenn Sie keinen Namen für die Einschränkung angeben, generiert Oracle einen Namen. Die meisten von Oracle generierten Einschränkungsnamen haben die Form SYS_C###### (z. B. SYS_C000145). Da der vom System generierte Einschränkungsname nichts über die Tabelle oder die Einschränkung aussagt, sollten Sie Ihre Einschränkungen benennen.

Im folgenden Beispiel wird die Primärschlüsseleinschränkung als Teil des Befehls CREATE TABLE für die Primärtabelle erstellt und benannt (beachten Sie die CONSTRAINT-Klausel):

Die CONSTRAINT-Klausel des Befehls CREATE TABLE benennt die Einschränkung (in diesem Fall TROUBLE_PK). Sie können diesen Einschränkungsnamen später verwenden, wenn Sie Einschränkungen aktivieren oder deaktivieren.