テンポラル関係制約 - Teradata Database - Teradata Vantage NewSQL Engine

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

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/avd1530664741287.ditamap
dita:ditavalPath
ja-JP/avd1530664741287.ditaval
dita:id
B035-1182
Product Category
Software
Teradata Vantage

テンポラル関係制約(TRC)とは、valid-time列を含まない子テーブルと、valid-time列を含む親テーブルとのテーブル間に定義する参照リレーションシップのことです。子テーブルのFKには、親テーブルのPKのvalid-time列を参照するTRC列という列を含む必要があります。子テーブルのTRC列の値は、valid-timeテーブルの対応する行のvalid-time列によって定義される期間内に存在しなければならないため、制約されています。

TRCを作成するために、特別なテンポラル構文や修飾子は必要ありません。その他のタイプのソフト参照制約を作成するために使用される標準のREFERENCES WITH NO CHECK OPTIONを使用してください。相違点は、TRCの場合、子テーブルにvalid-time列を含めることができないことと、親テーブルにvalid-time列を含める必要があることです。

親テーブルはvalid-timeのテンポラル テーブルであるため、子テーブルFK (TRC列の値を除く)は親テーブルの複数の行に存在することができます。この場合、親テーブルの対応する行が重複する連続的なvalid-time期間を含む必要があります。

その他のテンポラル参照制約と同様に、TRCはデータベースによって実施されるのではないソフト制約になります。TRCを定義する主な目的は、最適化ルーチンが冗長な結合を排除できるようにして、パフォーマンスを向上することです。

テンポラル関係制約の例

以下の文ではテーブルを作成し、各行のsale_date列の値が親valid-timeテーブルの対応する行のvalid-time列(vtcol)によって定義される期間内にあるTIMESTAMP値になるように制限します。

CREATE MULTISET TABLE sales (
  id INTEGER,
  description VARCHAR (100),
  sale_date TIMESTAMP(6),
  FOREIGN KEY (id, sale_date)
            REFERENCES WITH NO CHECK OPTION product(prod_id, vtcol)
) PRIMARY INDEX(id);

複数のTRCを子テーブルに定義できますが、TRC列にできるのは1つの列に限られます。次の例の場合、これは子テーブルのsale_date列です。

CREATE MULTISET TABLE sales (
  id INTEGER,
  id2 INTEGER,
  description VARCHAR(100),
  sale_date TIMESTAMP(6),
  FOREIGN KEY (id, sale_date) REFERENCES WITH NO CHECK OPTION
                              product(prod_id, vtcol),
  FOREIGN_KEY (id2, sale_date) REFERENCES WITH NO CHECK OPTION
product(prod_id2, vtcol) ,
) PRIMARY INDEX(id);

外部キーに2つのDateTime列が存在するときには、親テーブルのvalid-time列に対応する列がTRC列になります。次に示す例では、列'c'がTRC列として扱われることになります。

CREATE MULTISET TABLE Parent_Table
(
 a INT,
 b INT,
 c DATE,
 vt PERIOD(DATE) NOT NULL AS VALIDTIME, d DATE
)
PRIMARY INDEX(a);

CREATE MULTISET TABLE Child_Table(
  a INT,
  b INT,
  c DATE,
  d DATE,
  FOREIGN KEY (b, c, d)
   REFERENCES WITH NO CHECK OPTION Parent_Table(b, vt, d)
);