16.20 - ANSI Valid-Timeテーブルのテンポラル参照制約 - 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派生列に対して定義することができます。

構文



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は、Teradata DatabaseのANSIに対する拡張機能です。
table_name
外部キーによって参照されるテーブルの名前。
pk_column_list
親テーブルのプライマリキーとして使用される列の名前または列のカンマ区切りのリスト。
pk_valid_time_period
親テーブルのvalid-time派生期間列の名前。

ANSI準拠

この文は、ANSI SQL:2011規格に対するTeradata拡張機能です。

使用上の注意

これは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);