Übersicht über Einschränkungen

Snowflake bietet folgende Einschränkungsfunktionen:

  • Eindeutige Schlüssel, Primärschlüssel und Fremdschlüssel sowie NOT NULL-Spalten.

  • Benannte Einschränkungen.

  • Einspaltige und mehrspaltige Einschränkungen.

  • Inline- und Out-of-Line-Erstellung von Einschränkungen.

  • Erstellen, Ändern und Löschen von Einschränkungen

Unter diesem Thema:

Unterstützte Einschränkungstypen

Snowflake unterstützt folgende Einschränkungstypen aus dem ANSI SQL-Standard:

  • PRIMARY KEY

  • FOREIGN KEY

  • UNIQUE

  • NOT NULL

Eine Tabelle kann mehrere eindeutige Schlüssel und Fremdschlüssel enthalten, doch nur einen Primärschlüssel. Eine PRIMARY KEY-Einschränkung impliziert, dass die Spalte sowohl NOT NULL als auch UNIQUE ist.

Alle Fremdschlüssel müssen auf einen entsprechenden primären oder eindeutigen Schlüssel verweisen, der mit den Spaltentypen der einzelnen Spalten im Fremdschlüssel übereinstimmt. Der Primärschlüssel für einen Fremdschlüssel kann sich in einer anderen Tabelle oder in derselben Tabelle wie der Fremdschlüssel befinden. Wenn Sie Fremdschlüsseleinschränkungen für Hybridtabellen definieren, müssen sich die Tabellen in derselben Datenbank befinden.

Die folgende Tabelle fasst die Unterschiede eine Verhaltensweise zwischen Standardtabellen und Hybridtabellen in Bezug auf die Durchsetzung von Einschränkungen und die Frage, ob Einschränkungen erforderlich sind, zusammen.

  • Eine Einschränkung ist erzwungen, wenn sie eine Spalte davor schützt, auf bestimmte Weise aktualisiert zu werden. Zum Beispiel kann eine Spalte, die als NOT NULL deklariert ist, keinen NULL-Wert enthalten. Der Versuch, einen NULL-Wert in eine NOT NULL-Spalte zu kopieren oder einzufügen, führt immer zu einem Fehler. Bei Hybridtabellen können Sie die Eigenschaft NOT ENFORCED nicht für PRIMARY KEY-, FOREIGN KEY- und UNIQUE-Einschränkungen festlegen. Die Einstellung dieser Eigenschaft führt zum Fehler „invalid constraint property“ (ungültige Einschränkungseigenschaft).

  • Eine Einschränkung ist erforderlich, wenn eine oder mehrere Spalten in einer Tabelle eine solche Einschränkung haben müssen, was nur für PRIMARY KEY-Einschränkungen auf Hybridtabellen zutrifft.

Feature

Hybridtabellen

Standardtabellen

PRIMARY KEY-Einschränkungen

Erforderlich, erzwungen

Optional, nicht erzwungen

FOREIGN KEY-Einschränkungen

Optional, erzwungen (referenzielle Integrität)

Optional, nicht erzwungen

UNIQUE-Einschränkungen

Optional, erzwungen

Optional, nicht erzwungen

NOT NULL-Einschränkungen

Optional, erzwungen

Optional, erzwungen

Siehe auch CREATE | ALTER TABLE … CONSTRAINT.

Tabelleneinschränkungen

Snowflake unterstützt Einschränkungen für permanente, transiente, temporäre und Hybridtabellen. Sie können Einschränkungen für Spalten aller Datentypen definieren, und Sie können eine beliebige Anzahl von Spalten in eine einzige Einschränkung aufnehmen.

  • Wenn Sie eine Tabelle mithilfe von CREATE TABLE … LIKE oder CREATE TABLE … CLONE kopieren, werden alle vorhandenen Einschränkungen der Tabelle, einschließlich der Fremdschlüssel, in die neue Tabelle kopiert. (CREATETABLE … CLONE wird für Hybridtabellen nicht unterstützt.)

  • Bei Tabellen mit Einschränkungen werden zusätzliche Befehle und Funktionen wie DROP/UNDROP und GET_DDL unterstützt. Sie werden auch bei Schemas und Datenbanken unterstützt.

    Wenn für Snowflake Time Travel frühere Versionen einer Tabelle kopiert werden, wird die aktuelle Version der Einschränkungen für die Tabelle verwendet, da Snowflake keine früheren Versionen von Einschränkungen in Tabellenmetadaten speichert.

Einspaltige und mehrspaltige Einschränkungen

Einschränkungen können für eine einzelne Spalte oder für mehrere Spalten in derselben Tabelle definiert werden.

Bei mehrspaltigen Einschränkungen (z. B. zusammengesetzte Primärschlüssel oder eindeutige Schlüssel) werden die Spalten sortiert und hat jede Spalte eine entsprechende Schlüsselsequenz.

Inline- und Out-of-Line-Einschränkungen

Beim Erstellen oder Ändern von Tabellen werden Einschränkungen entweder inline oder „Out-of-Line“ definiert:

  • Inline-Einschränkungen werden als Teil der Spaltendefinition erstellt und können nur für einspaltige Einschränkungen verwendet werden.

  • Out-of-Line-Einschränkungen werden mit einer separaten Klausel definiert, die die Spalte(n) angibt, für die die Einschränkung erstellt wird. Sie können sowohl für die Erstellung von einspaltigen oder mehrspaltigen Einschränkungen als auch für die Erstellung von Einschränkungen für bestehende Spalten verwendet werden.

Einschränkungen in GET_DDL

Die SQL-Anweisungen, die GET_DDL zurückgibt, enthalten die Klauseln, die Einschränkungen definieren. Beachten Sie jedoch Folgendes:

  • Einspaltige Einschränkungen, wie NOT NULL und DEFAULT, werden inline mit der Definition der Spalte rekonstruiert.

  • Tabelleneinschränkungen, z. B. eindeutige Schlüssel/Primärschlüssel/Fremdschlüssel, werden stets als Out-of-Line-Einschränkungen rekonstruiert, auch wenn sie aus einer einzelnen Spalte bestehen.

  • Bei nicht benannten Einschränkungen (d. h. Einschränkungen mit einem vom System generierten Namen) wird der vom System generierte Name von GET_DDL nicht zurückgegeben.