すべてのテーブルに 2 つの列 [Create Time] と [Modify Time] を追加して、監査証跡を取得したいと考えています。将来、これらのフィールドはテーブルのパーティション分割に使用される可能性があります。これを行うための最良のアプローチは何ですか?DBでいくつかのトリガーを介してそれを行うか、コードを介してこれらの値を更新するのが賢明ですか. Hibernate API を使用して Oracle 11g と通信しています。
2 に答える
すでにHibernateを使用しているので、HibernateEnversを見てください。
Enversプロジェクトは、永続クラスの簡単な監査/バージョン管理を可能にすることを目的としています。あなたがしなければならないのは、あなたが監査したいあなたの永続的なクラスまたはそのプロパティのいくつかに@Auditedで注釈を付けることです。監査対象のエンティティごとに、エンティティに加えられた変更の履歴を保持するテーブルが作成されます。その後、多くの労力をかけずに履歴データを取得してクエリを実行できます。
これはより重いソリューションですが、アプリケーションに完全な制御を提供します。
または、Oracle PL / SQLトリガーを介してこれを行うこともできますが、アプリケーションはこれを制限付きで制御できます。
長所と短所があります。
個人的には、トリガーを使用します。
ただし、メイン テーブルと、監査証跡を共有したい関連テーブルが多数ある場合は、興味深いエッジ ケースが発生します。注文に関連する注文 + 注文明細行 + [その他の関連テーブルの多く] とします。この場合、監査対象の興味深いデータは注文であるため、注文には監査関連の詳細が含まれている必要があります。注文明細行の挿入/更新/削除のたびに起動するトリガー + [その他の関連テーブルの多く] がある場合、最終的にはパフォーマンスが低下します。