例: 注文数増加と割引率引き下げの同時発生 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/cjo1556732840654.ditamap
dita:ditavalPath
ja-JP/cjo1556732840654.ditaval
dita:id
B035-1182
Product Category
Software
Teradata Vantage

それぞれのトランザクションには、次に示す特徴があるとします。

時間 注文数増加トランザクション 割引率引き下げトランザクション
開始時刻 2009-01-02 2009-01-04
変更時刻 2009-01-07 2009-01-05
終了時刻 2009-01-08 2009-01-06

割引率引き下げが、注文数増加の実行中に開始および終了していることに注目してください。

これらのトランザクションが完了した後のPartsテーブルとOrdersテーブルの状態を次に示します。

割引率引き下げトランザクション後のPartsテーブル:

Part_ID Supplier_ID Price Discount Part_Validity
P1 S1 $10 10% (2008-01-01, 2009-01-04)
P1 S1 $10 5% (2009-01-04, 2011-01-01)

このテーブルの元の状態では、P1行がCURRENTトランザクションの対象となります。これは、P1行の有効時間がTEMPORAL_DATEと重なるためです。

さらに、PartsテーブルのP1行が変更されます。これは、OrdersテーブルのP1行が現在の時刻(2009-01-04)でトランザクションのWHEREテスト(quantity < 100)を満たすためです。

PartsテーブルのP1行への変更により、変更前の行の状態を示す履歴行が残されます。最初の行の終了時刻と2番目の行の開始時刻は、どちらも変更時点でのTEMPORAL_DATEでタイムスタンプが設定されていることに注目してください。

注文数増加トランザクション後のOrdersテーブル:

Order_ID Part_ID Quantity Order_Validity
O1 P1 60 (2008-01-01, 2009-01-02)
O1 P1 120 (2009-01-02, 2011-01-01)

Ordersテーブルの元のP1行がCURRENTトランザクションの対象となります。これは、この行の有効時間(2008-01-01, 2011-01-01)が、注文数増加トランザクションのTEMPORAL_DATE (2009-01-02)と重なるためです。

同様に、Partsテーブルの元の行がCURRENTトランザクションの対象となります。これは、この行の有効時間(2008-01-01, 2009-01-04)が、注文数増加トランザクションのTEMPORAL_DATE(2009-01-02)と重なるためです。また、この行はWHEREテスト(discount >= 10)を満たすため、注文数量が増やされ、変更前の行の状態を示す履歴行がOrdersテーブルに作成されることになります。

この例の場合、ACIDのトランザクションの分離性の原則に違反することになるため、データベース テーブルの最終的な状態は、各トランザクションが順番に実行されている前述のどちらの事例にも一致しません。