Hibernate Envers を使用していくつかのエンティティを監査しています。関連する監査テーブルを手動で作成しました。しかし、監査テーブルの主キーがどうあるべきかを判断するのに苦労しています。たとえば、顧客を格納するために設計された架空のテーブルを考えてみましょう。
CREATE TABLE CUSTOMER
(
CUSTOMER_ID INTEGER,
CUSTOMER_NAME VARCHAR(100),
PRIMARY KEY (CUSTOMER_ID)
)
そして、監査テーブルを作成します。
CREATE TABLE CUSTOMER_REVISION
(
REVISION_ID INTEGER,
REVISION_TYPE_ID INTEGER,
CUSTOMER_ID INTEGER,
CUSTOMER_NAME VARCHAR(100),
PRIMARY KEY (???)
)
私が検討したオプションは次のとおりです。
主キー:REVISION_ID
同じリビジョン中に同じクラスの複数のエンティティが変更される可能性があるため、これを主キーにすることはできません。
主キー: ( REVISION_ID
, CUSTOMER_ID
)
これは可能性が高いようですが、Envers がリビジョンごとに顧客ごとに複数のレコードを挿入するかどうかはわかりません。
主キー: ( REVISION_ID
, REVISION_TYPE_ID
, CUSTOMER_ID
)
これはやり過ぎのように思えますが、Envers がリビジョンごとに顧客ごとに異なるタイプのレコード ( add
、modify
または) を挿入する可能性があります。delete
主キー: 新しい列
おそらく、主キーは、合成主キーを含む別の列でなければなりません。
Hibernate Envers によって管理される監査テーブルの真の主キーは何ですか?