Zusätzliche Einschränkungsdetails

Unter diesem Thema:

Sicherheitsberechtigungen für Einschränkungen

Zum Erstellen von Einschränkungen für Primärschlüssel oder eindeutige Schlüssel:

  • Wenn Sie eine vorhandene Tabelle ändern, um die Einschränkung hinzuzufügen, muss die aktuelle Rolle des Benutzers über die Berechtigung OWNERSHIP für die Tabelle verfügen.

  • Beim Erstellen einer neuen Tabelle muss die aktuelle Rolle des Benutzers über die Berechtigung CREATE TABLE für das Schema verfügen, in dem die Tabelle erstellt wird.

Zum Erstellen von Fremdschlüsseleinschränkungen:

  • Die aktuelle Rolle des Benutzers muss über die Berechtigung OWNERSHIP für die Fremdschlüsseltabelle verfügen.

  • Die aktuelle Rolle des Benutzers muss über die Berechtigung REFERENCES für die eindeutige Schlüssel-/Primärschlüsseltabelle verfügen.

Die Berechtigung REFERENCES kann Rollen mit den Befehlen GRANT <Berechtigungen> … TO ROLE und REVOKE <Berechtigungen> … FROM ROLE erteilt und entzogen werden:

GRANT REFERENCES ON TABLE <pk_table_name> TO ROLE <role_name>

REVOKE REFERENCES ON TABLE <pk_table_name> FROM ROLE <role_name>

Kommentare zu Einschränkungen

Ähnlich wie bei anderen Datenbankobjekten und Konstrukten unterstützt Snowflake eine Angabe von Kommentaren zu Einschränkungen. Kommentare können Einschränkungen auf zwei Arten hinzugefügt werden:

  • Out-of-Line-Einschränkungen unterstützen die COMMENT-Klausel, in der beim Definieren der Einschränkung ein Kommentar angegeben werden kann.

    Beim Inline-Definieren von Einschränkungen sind Kommentare nicht zulässig, da sie zu Mehrdeutigkeiten führen können.

  • Kommentare zu Einschränkungen können auch mit dem Befehl COMMENT festgelegt werden:

    COMMENT [IF EXISTS] ON CONSTRAINT <constraint_name> IS '<comment_string>'
    

Unterstützung für Einschränkungen in Kopierbefehlen

Snowflake unterstützt das Erstellen von Tabellenkopien mit CREATE TABLE:

  • Verwenden Sie zum Erstellen einer leeren Kopie CREATE TABLE … LIKE.

  • Verwenden Sie zum Erstellen eines Klons CREATE TABLE … CLONE.

Außerdem werden beim Klonen eines Schemas oder einer Datenbank automatisch Tabellenkopien erstellt.

Unabhängig davon, wie eine Kopie für eine Tabelle erstellt wird, werden die Einschränkungen der Originaltabelle mit kopiert. Beim Kopieren eines Fremdschlüssels mit einer referenzierenden Tabelle (Fremdschlüsseltabelle) und einer referenzierten Tabelle (Primärschlüsseltabelle) können folgende Szenarien auftreten:

  • Wenn beide Tabellen im gleichen Befehl kopiert werden (z. B. beim Klonen eines Schemas oder einer Datenbank), wird zwischen der neuen referenzierenden Tabelle und der referenzierten Tabelle ein neuer Fremdschlüssel erstellt.

  • Wenn nur die referenzierende Tabelle kopiert wird, wird für die referenzierende Tabelle ein neuer Fremdschlüssel erstellt, der auf die ursprüngliche Primärschlüsseltabelle als referenzierte Tabelle verweist.

  • Wenn nur die referenzierte Tabelle kopiert wird, werden keine neuen Fremdschlüssel erstellt, obwohl die Primärschlüssel/eindeutigen Schlüssel kopiert werden.

Wenn ein Benutzer eine referenzierende und referenzierte Tabelle separat kopiert, muss er daher manuell einen neuen Fremdschlüssel erstellen oder die Primärschlüsseltabelle für den neuen Fremdschlüssel manuell ändern.

Unterstützung für Einschränkungen in GET_DDL

Snowflake unterstützt Einschränkungen für GET_DDL; beachten Sie jedoch Folgendes:

  • Nur 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.