SQLServer2005。
このアプリケーションでは、親テーブルといくつかの子テーブルを持つエンティティがあります。このエンティティに加えられた改訂を追跡したいと思います。行ったり来たりした後、2つのアプローチから選択するように絞り込みました。
エンティティの履歴テーブルを1つ用意します。sprocがテーブルを更新する前に、親テーブルとすべての子テーブルからエンティティの現在の状態全体を取得します。それをXML化し、XMLデータ型として履歴テーブルに貼り付けます。クエリする列と、リビジョン番号/作成日を含めます。
テーブルごとに、同じ列を持つ一致する履歴テーブルを作成します。改訂番号/作成日もあります。sprocが単一のテーブルを更新する前に、その1つのテーブルのレコードの既存の状態を取得し、それを履歴テーブルにコピーします。つまり、SVNに少し似ています。リビジョンYのエンティティを取得する場合は、各テーブルの履歴レコードを取得する必要があります。最大リビジョン数はY以下です。エンティティの1つのテーブルに50のリビジョンレコードがある場合がありますが、子テーブルなど。エンティティ全体のリビジョンカウンターをどこかに保持したいと思うでしょう。
どちらのアプローチにも頭痛の種があるようですが、それでも私はソリューション#1よりもソリューション#2の方が好きです。これはすでに巨大なデータベースであり、すでにパフォーマンスの問題に悩まされています。すべてのリビジョンでXMLブロブを使用してそれを膨らませること(そしてたくさんあるでしょう)は、恐ろしい方法のように思えます。すべての履歴テーブルを作成することは、これを行うためのより良い方法がない限り、私が喜んで食べるコストです。
助言がありますか?
ありがとう、Tedderz