FOREIGN KEY - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Published
2021年1月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/ncd1596241368722.ditamap
dita:ditavalPath
ja-JP/ncd1596241368722.ditaval
dita:id
B035-1144
Product Category
Software
Teradata Vantage

このテーブルの列セットから別のテーブルのプライマリ キーまたは代替キーへの外部キー参照を指定します。

外部キー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_namereferenced_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);