このテーブルの列セットから別のテーブルのプライマリ キーまたは代替キーへの外部キー参照を指定します。
外部キーREFERENCES制約は、列属性またはテーブル属性として指定できます。
データベース オブジェクトの命名ルールについては、<Teradata Vantage™ - SQLの基本、B035-1141>を参照してください。
次のルールが外部キーのREFERENCES制約に適用されます。
- 参照先のテーブルまたは参照先のテーブルの指定されたすべての列のいずれかに対するREFERENCES権限を持っている必要があります。
- 1つの表に対して最大64の外部キーを定義でき、1つの表に対して最大64の参照制約を定義できます。
同様に、1つのテーブルを最大64の他のテーブルが参照できます。したがって、1つのテーブルにつき、テーブルのヘッダーに格納できる参照インデックスは最大128ですが、参照インデックスのサブテーブル1つにつき格納できるのは、それらの中でテーブルとその子テーブルとの間の関係をマップする64の参照インデックスだけです。参照インデックスに対するテーブル ヘッダーの制限には、テーブルへの参照とテーブルからの参照の両方が含まれます。
テンポラル テーブルと外部キーのREFERENCES制約についての詳細は、<Teradata Vantage™ - ANSIテンポラル テーブル サポート、B035-1186>および<Teradata Vantage™ - テンポラル テーブル サポート、B035-1182>を参照してください。
親テーブルが存在していない場合でも子テーブルを作成できますが、まだ作成されていないテーブルを前方参照するREFERENCES制約では、親テーブルの名前をデータベース名で修飾することはできません。
前方参照される作成前の親テーブルは、現在作成している子テーブルと同じデータベース内に存在することになると想定されます。
外部キーreferenced_column_nameリストの各列はREFERENCES referenced_table_nameのreferenced_table_nameの列に対応する必要があり、また、同じ列名を複数回指定することはできません。
外部キー列リストには、table_nameにある参照先のプライマリ キーまたは代替キーと同数の列名が含まれている必要があります。参照元リストのithの列は、参照先リストで識別されるithの列に対応します。
各外部キーが参照する列のデータ型は、対応するREFERENCES参照先列のデータ型と同じでなければなりません。
個々の外部キーをそれぞれ最大64列に定義できます。
すべてのテーブルに対して、最大100のテーブル レベルの制約を定義できます。
次のデータ型を持つ列に対しては外部キーのREFERENCES制約を指定できません。
- BLOB
- CLOB
- UDT
- ARRAY/VARRAY
- Period
- XML
- Geospatial
- JSON
- DATASET
識別列には外部キーREFERENCES制約を指定できません。
外部キーREFERENCES制約はNULLであることが可能です。
外部キーREFERENCES制約が固有になることもありますが、そのようになることはほとんどありません。
外部キーが固有になる場合の例として、1つの論理テーブルから複数のテーブルへの縦方向パーティションが挙げられます。
外部キーのREFERENCES制約をグローバル一時トレース テーブル、揮発テーブル、またはキュー テーブルに対して指定することはできません。 CREATE TABLE(キュー テーブル形式)を参照してください。
COPY TABLEの構文を使用して外部キーのREFERENCES制約を新しいテーブルにコピーすることはできません。
標準の参照整合性制約、バッチ参照整合性制約、および参照制約を組み合わせて同じテーブルに指定することはできますが、同じ列セットには指定できません。詳細については、Teradata Vantage™ - SQLデータ定義言語 - 詳細トピック、B035-1184のCREATE TABLEを参照してください。
例: バッチ参照整合性制約の指定
この例では、テーブル レベルのバッチ参照整合性制約を、子テーブルdrs.t2の列d1で作成します。この子テーブルは、親テーブルdrs.t1の列c1を参照します。参照整合性は、この制約に強制されます。
CREATE SET TABLE drs.t1, NO FALLBACK, NO BEFORE JOURNAL, NO AFTER JOURNAL ( c1 INTEGER NOT NULL, c2 INTEGER NOT NULL, c3 INTEGER NOT NULL) UNIQUE PRIMARY INDEX (c1); CREATE SET TABLE drs.t2, NO FALLBACK, NO BEFORE JOURNAL, NO AFTER JOURNAL ( d1 INTEGER, d2 INTEGER, d3 INTEGER, FOREIGN KEY (d1) REFERENCES WITH CHECK OPTION drs.t1 (c1));
例: テーブル レベル外部キー制約の指定
最初のリクエストでは、外部キー列a2とテーブルdの列d1についてのテーブル レベル標準参照整合性制約が作成されます。参照整合性は、この関係に強制されます。
2番目のリクエストでは、列a2とテーブルdの列d1についてのテーブル レベルの参照制約関係が作成されます。参照整合性は、この関係に強制されません。
CREATE TABLE a ( a1 INTEGER, a2 CHARACTER(10), a3 INTEGER, FOREIGN KEY (a2) REFERENCES d(d1)) PRIMARY INDEX (a1); CREATE TABLE a ( a1 INTEGER, a2 CHARACTER(10), a3 INTEGER, FOREIGN KEY (a2) REFERENCES WITH NO CHECK OPTION d(d1)) PRIMARY INDEX (a1);