テンポラル参照制約では2つの表間のリレーションシップを定義します。このリレーションシップでは、外部キー(FK)に属するvalid-time列が含まれていて、子表の1つまたは複数の制約列(FK)に含まれる各値が、親表のそれに対応する参照列(プライマリキー(PK))に存在する必要があります。したがって、子表の各行のvalid-time値は、親表内にvalid-time値として存在している必要があります。
このような制約はVantageによって強制されないので、「ソフト参照整合性」と呼ばれることがあります。このような制約は強制されていませんが、最適化ルーチンは冗長な結合を排除し、問合わせのパフォーマンスを向上するために、それらの制約を使用します。
このような制約に違反しないことを確認するのは、ユーザーの責任になります。
テンポラル参照制約は、特殊なPERIODキーワードを使用してvalid-time派生期間列の名前を指定することにより、テンポラル表のvalid-time派生列に対して定義することができます。
ANSI準拠
この文は、ANSI SQL:2011規格に対するTeradata拡張機能です。
使用上の注意
- system-time派生期間列を参照元の列または参照先の列のリストに含めることはできません。
- PK-FK制約はsystem-time次元内のオープンな行にのみ適用されます。
- これはvalid-time列間のリレーションシップであるため、PK-FKテンポラル参照制約リレーションシップ内の参照元のテーブルと参照先のテーブルにはvalid-timeテーブルまたは二重テンポラル テーブルのいずれかを使用できます。テーブルのタイプが一致する必要はありません。
例: ANSI二重テンポラル テーブルのテンポラル参照制約
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_bitemporal_ri ( eid INTEGER NOT NULL, ename VARCHAR(5) NOT NULL, deptno INTEGER 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), sys_start TIMESTAMP(6) WITH TIME ZONE NOT NULL GENERATED ALWAYS AS ROW START, sys_end TIMESTAMP(6) WITH TIME ZONE NOT NULL GENERATED ALWAYS AS ROW END, PERIOD FOR SYSTEM_TIME(sys_start,sys_end), FOREIGN KEY(eid,PERIOD job_dur) REFERENCES WITH NO CHECK OPTION hire_contracts(h_eid, PERIOD hire_period) ) PRIMARY INDEX (eid) WITH SYSTEM VERSIONING;