それぞれのトランザクションには、次に示す特徴があるとします。
時間 | 注文数増加トランザクション | 割引率引き下げトランザクション |
---|---|---|
開始時刻 | 2009-01-02 | 2009-01-09 |
変更時刻 | 2009-01-07 | 2009-01-10 |
終了時刻 | 2009-01-08 | 2009-01-11 |
- 開始時刻は、この例のトランザクションのTEMPORAL_DATE値になります。この時刻は、トランザクションに関与する行の特定と、変更した行のタイムスタンプ設定の両方に使用されます。
- 変更時刻は、トランザクションによって変更が加えられた時刻になります。
- 終了時刻は、トランザクションがコミットされ、完了した時刻になります。
注文数増加が、割引率引き下げの開始前に終了していることに注目してください。
これらのトランザクションが完了した後のOrdersテーブルとPartsテーブルの状態を次に示します。
注文数増加トランザクション後の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) |
このテーブルの元の状態では、P1行がCURRENTトランザクションの対象となります。これは、P1行の有効期間とトランザクションの開始時刻(TEMPORAL_DATE値)である現在の時刻が重なるためです。この時刻は、トランザクションの特徴のテーブルにある項目「開始時刻」に示してあります。PERIOD (2008-01-01, 2011-01-01)は、2009-01-02と重なります。
さらに、OrdersテーブルのP1行が変更されます。これは、PartsテーブルのP1行がトランザクションのWHEREテスト(discount = 10)を満たすためです。
OrdersテーブルのP1行への変更により、変更前の行の状態を示す履歴行が残されます。最初の行の終了時刻と2番目の行の開始時刻は、どちらも変更時点でのTEMPORAL_DATEでタイムスタンプが設定されていることに注目してください。
割引率引き下げトランザクション後のPartsテーブルの状態:
Part_ID | Supplier_ID | Price | Discount | Part_Validity |
---|---|---|---|---|
P1 | S1 | $10 | 10% | (2008-01-01, 2011-01-01) |
P1行は変更されません。これは、割引率引き下げトランザクションの時点での現在の時刻が2009-01-09であるためです。この現在の時刻を使用すると、Ordersテーブルの2番目の行のみがトランザクションの対象となりますが、この行はWHEREテスト(quantity < 100)を満たしません。これは、先行する注文数増加トランザクションで変更が実施されているためです。