REFERENCES制約の列属性 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/spp1591731285373.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1144
Product Category
Software
Teradata Vantage
列属性としてREFERENCESを指定します。この制約に名前が付けられているかどうかに応じて、次のように構文が変化します。
  • 名前なしのREFERENCES列制約の場合。
         REFERENCES referenced_table_name (referenced_column_name)
  • 名前付きのREFERENCES列制約の場合。
         CONSTRAINT constraint_name REFERENCES referenced_table_name
                                   (referenced_column_name)
次のルールは列属性のREFERENCES制約のみに適用されます。
  • SQLテキストFOREIGN KEY (referencing_column)を列属性外部キー制約に指定しないでください。参照する列は列外部キー制約では暗黙であり、FOREIGN KEYキーワードはテーブル制約外部キーの指定にのみ使用します。
  • column_nameを指定しない場合、参照先のテーブルは単純なプライマリ キーを持っている必要があり、指定された外部キー列は、参照先テーブルのそのプライマリ キー列を参照します。
  • column_nameを指定する場合は、参照先表の単純なプライマリ キーまたは参照先表のUNIQUEとして定義された単純な代替キーを参照する必要があります。

    このルールは参照制約には適用されません。そのような場合は、PRIMARY KEYキーワードまたはUNIQUEキーワードを使用するか、またはテーブルの定義でUSIとして宣言することにより、参照先テーブルのプライマリ キーとして機能する候補キーが固有であることを明示的に宣言する必要はありません。

    ただし、関係の中の候補キーは固有であると明示的に宣言されなくても、実際には常に固有でなければなりません。固有でない場合、データの整合性維持を確保するための適切な注意が払われていない一部の状況において、誤った結果が生成され、データベースが破壊される可能性があります。これは定義上明らかです。詳細は、<Teradata Vantage™ - データベースの設計、B035-1094>を参照してください。

    参照制約を指定するときには常にそうであるように、ユーザーは参照整合性が維持する参照関係がすべての場合に真であること、および参照整合性関係内のすべての候補キーが固有であることに対して責任を負う必要があります。これは、Vantageがどちらの制約も適用しないからです。

referenced_table_name
指定されたreferencing_columnが参照するプライマリ キーまたは代替キーを含むテーブルの名前。
(referenced_column_name)
referencing_columnが参照するプライマリ キーまたは代替キーを含むreferenced_table_nameの列の名前。
CONSTRAINT constraint_name
列属性の外部キー制約の名前。

例: 参照整合性制約の指定

この例では、table_1が、以下のテーブルに説明するような参照整合性制約を指定する列レベル外部キー制約およびテーブル レベル外部キー制約を使用して作成されます。

例で使用される参照 制約のレベル
table_1の明示的な外部キー列(column_1、column_2)がtable_2に対して外部キーを定義します。

これが作動するためには、table_1の(column_1、column_2)列と同じタイプの列(これらをupi_column_1およびupi_column_2と呼びます)が、table_2の固有プライマリ インデックスの列を構成していることが必要です。

すなわち、table_2の列upi_column_1およびupi_column_2は、どちらもINTEGERタイプとして定義されていて、table_2の固有プライマリ インデックスを構成している必要があります。

そうでない場合には、エラーが戻されます。

テーブル
table_1の明示的な外部キー列column_1が、table_3の列column_1を明示的に参照します。

table_1(column_1)とtable_3(column_1)は、どちらもINTEGER型にする必要がありますが、table_3(column_1)はtable_3の固有プライマリ インデックスである必要がありません。

       CREATE TABLE table_1
        (column_1 INTEGER NOT NULL REFERENCES table_3(column_1),
         column_2 INTEGER,
       FOREIGN KEY (column_1, column_2) REFERENCES table_2)
       PRIMARY INDEX (column_1);

例: 列レベル外部キー制約の指定

最初のリクエストでは、列a1とテーブルbの列b1についての列レベルの参照整合性制約が作成されます。参照整合性は、この関係に強制されます。

2番目のリクエストでは、列a1とテーブルbの列b1についての列レベルの参照制約関係が指定されます。参照整合性は、この関係に強制されません。

    CREATE TABLE a (
     a1 INTEGER REFERENCES b(b1),
     a2 CHARACTER(10))
    PRIMARY INDEX (a1); 
    
    CREATE TABLE a (
     a1 INTEGER REFERENCES WITH NO CHECK OPTION b(b1),
     a2 CHARACTER(10))
    PRIMARY INDEX (a1);