制約の概要

Snowflakeは、次の制約の機能を提供します。

  • 一意キー、主キー、外部キー、列の NOT NULL 制約。

  • 名前付き制約。

  • 単一列および複数列の制約。

  • インラインおよびアウトラインの制約の作成。

  • 制約の作成、変更、削除のサポート。

このトピックの内容:

サポートされている制約のタイプ

Snowflakeは、ANSI SQL標準で次の制約のタイプをサポートしています。

  • UNIQUE

  • PRIMARY KEY

  • FOREIGN KEY

  • NOT NULL

テーブルには複数の一意キーと外部キーを含めることができますが、主キーは1つしか含めることができません。すべての外部キーは、外部キーの各列の列タイプと一致する、対応する主キーまたは一意キーを参照する必要があります。外部キーの主キーは、外部キーとは異なるテーブル、または同じテーブルに存在できます。

注釈

Snowflakeは、制約の定義と維持をサポートしていますが、常に強制される NOT NULL 制約以外については強制しません。

テーブルの制約

Snowflakeは、永続テーブル、トランジェントテーブル、テンポラリテーブルの制約の定義をサポートしています。制約はすべてのデータ型の列に定義でき、制約に含めることができる列の数に制限はありません。

  • CREATE TABLE...LIKEまたはCREATE TABLE...CLONEを使用してテーブルをコピーする場合、外部キーを含むすべての既存のテーブルの制約が新しいテーブルにコピーされます。

  • DROP/UNDROPやGET_DDLなどの追加のコマンドと関数は、制約が含まれるテーブルでサポートされます。スキーマとデータベースでもサポートされます。

    Snowflake Time Travelでは、Snowflakeはテーブルメタデータに旧バージョンの制約を保管しないため、テーブルの旧バージョンをコピーする場合はテーブルの現バージョンの制約が使用されます。

単一列制約と複数列制約

制約は、同じテーブルの単一の列または複数の列に定義できます。

複数列制約(複合主キーまたは一意キー)の場合、列は順序付けられ、各列には対応するキーシーケンスがあります。

インライン制約とアウトライン制約

制約は、テーブルの作成または変更時にインラインまたはアウトラインのいずれかで定義されます。

  • インライン制約は、列定義の一部として作成され、単一列制約にのみ使用できます。

  • アウトライン制約は、制約が作成される列を指定する別の句を使用して定義されます。これらは、単一列または複数列の制約の作成、および既存列の制約の作成のいずれかで使用できます。