16.20 - ANSI二重テンポラル テーブルのテンポラル参照制約 - Teradata Vantage NewSQL Engine

Teradata Vantage™ ANSIテンポラル テーブル サポート

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1186-162K-JPN

目的

テンポラル参照制約では2つの表間のリレーションシップを定義します。このリレーションシップでは、外部キー(FK)に属するvalid-time列が含まれていて、子表の1つまたは複数の制約列(FK)に含まれる各値が、親表のそれに対応する参照列(プライマリキー(PK))に存在する必要があります。したがって、子表の各行のvalid-time値は、親表内にvalid-time値として存在している必要があります。

このような制約はTeradata Databaseによって強制されないので、「ソフト参照整合性」と呼ばれることがあります。このような制約は強制されていませんが、最適化ルーチンは冗長な結合を排除し、問合わせのパフォーマンスを向上するために、それらの制約を使用します。
このような制約に違反しないことを確認するのは、ユーザーの責任になります。

テンポラル参照制約は、特殊な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;