2 つ目の考慮事項は、ベースラインが適用されたアクティブなドキュメントまたはドキュメントのフォルダーに関連付けられたテーブル データのコピーを作成し、それを安全に保管することでした。コードの複雑さは大幅に軽減され、スキーマはよりシンプルに保たれますが、ストレージの使用に関しては多少の影響があります (それほど大きくなるとは思いませんが)。
2 に答える
これは私が現在のプロジェクトでも直面していることです。ここにいくつかの良い答えがあります。
私は個人的にオプション#1を使用しており、各「バージョン管理された」テーブルのpkeyにバージョン列を追加しています。FKeyはバージョン列も使用します。私の主な考慮事項は、高いストレージ要件の結果としてのクエリの容易さでした。保持するバージョンの数を厳密に制限する余裕があります。これにより、この問題が軽減されます。
一時的なデータベースを探していると思います。私たち自身の実装では、「作成 ID」と「削除 ID」という監査ログ識別子のペアをテーブルに追加しました (データベースを変更したすべてのトランザクションは「監査ログ」にまとめられ、一意の連続識別子が与えられました)。テーブルにレコードを追加したトランザクションごとに、監査ログ識別子が作成 ID として使用され、削除 ID はゼロでした。レコードが変更されると、新しいバージョンには新しい作成 ID があり、同じ識別子が古いバージョンの削除 ID として使用されていました。
削除 ID がゼロのテーブルのビューを作成して、現在のデータだけの仮想テーブルを作成するのは非常に簡単でした。また、特定のトランザクションが処理される直前または直後にテーブルの内容を見つけたり、テーブルの特定の行を変更したトランザクションのリストを取得したりすることもできます。
これらすべてには、時間、スペース、および複雑さのペナルティがあります。しかし、大金を扱う私たちにとっては、それだけの価値がありました。