テンポラル参照制約では2つの表間のリレーションシップを定義します。このリレーションシップでは、外部キー(FK)に属するvalid-time列が含まれていて、子表の1つまたは複数の制約列(FK)に含まれる各値が、親表のそれに対応する参照列(プライマリキー(PK))に存在する必要があります。したがって、子表の各行のvalid-time値は、親表内にvalid-time値として存在している必要があります。
このような制約はVantageによって強制されないので、「ソフト参照整合性」と呼ばれることがあります。このような制約は強制されていませんが、最適化ルーチンは冗長な結合を排除し、問合わせのパフォーマンスを向上するために、それらの制約を使用します。
このような制約に違反しないことを確認するのは、ユーザーの責任になります。
テンポラル参照制約は、特殊なPERIODキーワードを使用してvalid-time派生期間列の名前を指定することにより、テンポラル表のvalid-time派生列に対して定義することができます。
ANSI準拠
この文は、ANSI SQL:2011規格に対するTeradata拡張機能です。
構文
FOREIGN KEY ( fk_column_list, PERIOD fk_valid_time_period ) REFERENCES WITH NO CHECK OPTION table_name ( pk_column_list, PERIOD pk_valid_time_period )
- fk_column_list
- 子テーブルの外部キーとして使用される列の名前または列のカンマ区切りのリスト。これらの列は、pk_column_listを参照し、これに対応します。fk_column_list列の各値は、pk_column_listの対応する列に存在する必要があります。
- fk_valid_time_period
- 子テーブルのvalid-time派生期間列の名前。
- REFERENCES WITH NO CHECK OPTION
- この関係が参照制約であり、データベースによって強制されないように指定します。
WITH NO CHECK OPTIONは、ANSIに対するTeradata拡張機能です。
- table_name
- 外部キーによって参照されるテーブルの名前。
- pk_column_list
- 親テーブルのプライマリキーとして使用される列の名前または列のカンマ区切りのリスト。
- pk_valid_time_period
- 親テーブルのvalid-time派生期間列の名前。
使用上の注意
これはvalid-time列間のリレーションシップであるため、PK-FKテンポラル参照制約リレーションシップ内の参照元のテーブルと参照先のテーブルにはvalid-timeテーブルまたは二重テンポラル テーブルのいずれかを使用できます。テーブルのタイプが一致する必要はありません。二重テンポラル テーブルの詳細については、ANSI二重テンポラル テーブルの作業を参照してください。
例: ANSI Valid-Timeテーブルのテンポラル参照制約
CREATE MULTISET TABLE hire_contracts( h_eid INTEGER NOT NULL, h_name VARCHAR(5) NOT NULL, h_terms VARCHAR(5), contract_start DATE NOT NULL, contract_end DATE NOT NULL, PERIOD FOR hire_period(contract_start,contract_end) AS VALIDTIME, PRIMARY KEY(h_eid, hire_period WITHOUT OVERLAPS) ) PRIMARY INDEX(h_eid); CREATE MULTISET TABLE employee_vt_ri ( eid INTEGER NOT NULL, ename VARCHAR(5) NOT NULL, terms VARCHAR(5), job_start DATE NOT NULL, job_end DATE NOT NULL, PERIOD FOR job_dur(job_start,job_end) AS VALIDTIME, UNIQUE(eid,job_dur WITHOUT OVERLAPS), FOREIGN KEY(eid,PERIOD job_dur) REFERENCES WITH NO CHECK OPTION hire_contracts(h_eid, PERIOD hire_period) ) PRIMARY INDEX (eid);