9

長い間、履歴が失われないケース管理システムを作成したいと考えていました。変更が加えられたとき、その変更を記録したいのですが、任意の時点に戻って記録がどのように見えるかを確認することができます。スタック オーバーフロー コミュニティにこの質問を投げかけ、これを行う方法を確認したかったのですが、これを実現するためのテクノロジは既に存在しますか?

4

2 に答える 2

8

はい、その技術は確かに存在します - それを実装して正しく行うには少し努力が必要です。

あなたが探しているのはテンポラル データベースと呼ばれるものです。いくつかのリソースを参照してください。

于 2010-10-06T17:17:39.873 に答える
3

前述のmarc_sのような時制データベースがどのように機能するかはわかりませんが、SQL Server 2008以降を使用している場合は、組み込みのChange Data Capture(CDC)機能を利用できます。

CDCを有効にすると、レプリケーショントランザクションログを使用してテーブルの挿入、更新、削除を保存し、特定の日時の行を取得したり、変更のみを取得したりできるテーブル値関数を作成します。

ただし、トランザクションログが手に負えないほど大きくなり、遅くなるため、CDCだけに頼ることはできません。だからあなたがすることは:

  • CDCを有効にし、
  • 元のテーブルと同じスキーマを使用して履歴テーブルを作成しますが、行バージョン情報を格納するための列をさらに2つ追加し(リレーショナルOLAPデータベースでゆっくりと変化するディメンションのように)、
  • 最後のロード以降の変更についてCDC関数を定期的にポーリングし、それらを履歴テーブルにプッシュするジョブを作成します

次に、クエリで履歴テーブルを使用して、通常どおりに結合できますが、追加の述語を使用して、任意の日付の「現在」のレコードを取得できます。

于 2010-10-06T20:26:06.353 に答える