制約の追加詳細

このトピックの内容:

制約のセキュリティ権限

主キー制約または一意制約を作成する場合:

  • 既存のテーブルを変更して制約を追加する場合、ユーザーの現在のロールには、テーブルに対するOWNERSHIP権限が必要です。

  • 新しいテーブルを作成する場合、ユーザーの現在のロールには、テーブルが作成されるスキーマに対するCREATE TABLE権限が必要です。

外部キー制約を作成する場合:

  • ユーザーの現在のロールには、外部キーテーブルに対するOWNERSHIP権限が必要です。

  • ユーザーの現在のロールには、一意/主キーテーブルに対するREFERENCES権限が必要です。

GRANT <権限> ... TO ROLE および REVOKE <権限> ... FROM ROLE コマンドを使用して、ロールへのREFERENCES権限の付与および取り消しができます。

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

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

制約に対するコメント

他のデータベースオブジェクトや構築と同様に、Snowflakeは制約に対するコメントの提供をサポートしています。次の2つの方法で、制約にコメントを追加できます。

  • アウトライン制約は、COMMENT句をサポートします。この句では、制約の定義中にコメントを指定できます。

    コメントがあいまいさの原因になる可能性があるため、インラインで制約を定義する場合、コメントは許可されません。

  • COMMENTコマンドを使用して、制約にコメントを設定することもできます。

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

コピーコマンドでの制約のサポート

Snowflakeは、 CREATE TABLE を使用したテーブルのコピーの作成をサポートしています。

  • 空のコピーを作成するには、次を使用します。CREATE TABLE...LIKE.

  • クローンを作成するには、次を使用します。CREATE TABLE...CLONE.

さらに、スキーマまたはデータベースがクローンされると、テーブルのコピーが自動的に作成されます。

テーブルのコピーが作成される方法にかかわらず、元のテーブルの制約もコピーされます。参照テーブル(外部キーテーブル)と被参照テーブル(主キーテーブル)で外部キーをコピーすると、次の状況が発生する場合があります。

  • 両方のテーブルが同じコマンドでコピーされた場合(スキーマまたはデータベースのクローン作成中など)、新しい参照テーブルと被参照テーブルの間に新しい外部キーが作成されます。

  • 参照テーブルのみがコピーされる場合、参照テーブルに新しい外部キーが作成され、被参照テーブルとして元の主キーテーブルが挙げられます。

  • 被参照テーブルのみがコピーされる場合、主/一意キーはコピーされますが、新しい外部キーは作成されません。

その結果、ユーザーが参照テーブルと被参照テーブルを別々にコピーする場合、新しい外部キーを手動で作成するか、新しい外部キーの主キーテーブルを手動で変更する必要があります。

GET_DDLでの制約のサポート

Snowflakeは、 GET_DDL の制約をサポートしています。ただし、次のことに注意してください。

  • NOT NULLDEFAULT などの単一列のみの制約は、列の定義に従ってインラインで再構築されます。

  • 一意/主/外部キーなどのテーブル制約は、単一の列で構成されている場合でも、常にアウトライン制約として再構築されます。

  • 名前のない制約(システムにより生成された名前の制約)の場合、システムにより生成された名前は GET_DDL から返されません。