我正在使用 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 管理的审计表的真正主键是什么?