それぞれのトランザクションには、次に示す特徴があるとします。
時間 | 注文数増加トランザクション | 割引率引き下げトランザクション |
---|---|---|
開始時刻 | 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のトランザクションの分離性の原則に違反することになるため、データベース テーブルの最終的な状態は、各トランザクションが順番に実行されている前述のどちらの事例にも一致しません。