現在、一部の主要な事業体に監査証跡の生成を実装する必要があります。これらの場合、通常どおり、変更されたすべてのフィールドの新旧の値と、タイムスタンプ、エンティティID、ユーザーなどのヘッダーデータを保持する必要があります。誰が保存しましたか。
これを行うには、次のようなさまざまな方法があることを理解しています。
- .NETコード側、Reflectionを使用
- SQLServer側のトリガー
- SQL Server CDC(変更データキャプチャ)
.NET Reflectionベースのメソッドは、作成に少し時間がかかる可能性がありますが、適切に実行されれば、コードを変更せずに将来追加される新しいプロパティを含めることができ、すべての子エンティティ(のコレクションなど)を拡張および比較することもできます。メインの.NETエンティティに追加された他のサブエンティティ)。
実際には、このような.NETベースの監査証跡生成を使用するレガシーアプリケーションがあり、監査証跡全体をXMLフィールドとしてSQLデータベースに保存し、長年にわたって監査テーブルは35GBのデータのようなものになっています。
次の点で、トリガーベースのソリューションがいかに簡単であるかを考えています。
- 最初の実装
- 監査するエンティティの将来の変更で必要なすべての変更(フィールドの追加/変更/削除など...)
- 監査データはどの程度読みやすいですか?特定の保存操作の新旧の値を表示するクエリを単純に作成できますか?
...そしてパフォーマンスはどうですか?
誰かが両方のアプローチの経験があり、いくつかの長所と短所を提案または指摘することができますか?