データベース 2025-02-27

Nontemporarl・Unitemporal・Bitemporalの特徴と設計

Nontemporarl・Unitemporal・Bitemporalの特徴と設計について、設計原則とトレードオフ、実践的な適用方法を詳しく解説します。

Read in: en
Nontemporarl・Unitemporal・Bitemporalの特徴と設計

データモデルには、時間軸(履歴や有効期間など)をどのように管理するかによって、いくつかのパターンが存在する。

  1. Nontemporal(ノンテンポラル)
  2. Unitemporal(ユニテンポラル)
  3. Bitemporal(バイテンポラル)

それぞれは「時間情報をどの程度細かく、どのような意味で管理するか」という点で異なる。

これらのデータモデルの特徴や設計例、メリット・デメリットについて解説する。

1. Nontemporal(ノンテンポラル)データモデル

特徴

設計例

メリット

デメリット

2. Unitemporal(ユニテンポラル)データモデル

特徴

パターン例

  1. システム時間(トランザクションタイム)を管理

    • データベースに「このレコードがいつINSERTされ、いつDELETEされたか(あるいは無効化されたか)」を管理する。
    • 主に監査目的や、DB上の履歴を遡って参照する場合に有用。
  2. ビジネス時間(有効期間)を管理

    • 「このレコードがビジネス上いつからいつまで有効か」を表す。
    • 価格や契約期間、組織改編の有効期間など、業務ロジック上の“有効日付”が重要となるケースで使う。

設計例(ビジネス時間管理の場合)

メリット

デメリット

3. Bitemporal(バイテンポラル)データモデル

特徴

設計例

以下は一例です。実際にはDB製品や要件に応じて型や制約は様々ですが、概念としては同様になります。

CREATE TABLE contract_bitemporal (
    contract_id          INT,
    contract_name        VARCHAR(100),
    business_from        DATE,   -- ビジネス上の有効開始日
    business_to          DATE,   -- ビジネス上の有効終了日
    system_from          TIMESTAMP, -- DB上でこのレコードが有効になった時刻
    system_to            TIMESTAMP, -- DB上でこのレコードが無効化(または論理削除)された時刻
    ...
    PRIMARY KEY (contract_id, business_from, system_from)
    -- PK設計の方法は要件次第
);

メリット

デメリット


まとめと選定のポイント

  1. Nontemporal
    • 「現在の状態のみを管理できればよい」「履歴を遡る必要がない」シナリオに最適。
    • 設計や実装、パフォーマンス、運用は最も簡単。
  2. Unitemporal
    • 過去や未来の履歴をある程度管理したい場合に有効。
    • システム時間かビジネス時間、いずれかの軸がクリティカルな場合に選択。
  3. Bitemporal
    • システム時間とビジネス時間の両方を正確に管理し、柔軟に過去状態を再現・訂正したい場合に使用。
    • 最も高機能だが、設計・実装・運用が難しく、データ量も増えやすい。

選定基準としての考え方

補足

Tags: Bi-Temporal Uni-Temporal Non-Temporal DB
Share: 𝕏 Post Facebook Hatena
✏️ View source / Discuss on GitHub
☕ サポート

このブログを応援していただける方は、以下からサポートをお願いします。いただいたサポートはブログ運営・技術研鑽に活用します。


関連記事