【发布时间】:2014-04-27 23:31:46
【问题描述】:
我们希望保留某些表格的编辑历史,并在必要时恢复它们。例如,我们有以下表格。我们希望在执行插入/删除操作时审核 emp 表。除此之外,当版本字段发生更新时,我们还需要将相关 emp_addr 记录的副本保存到 emp_addr_audit。当用户想要回滚到某个emp的特定版本时,我们需要从emp_audit和emp_addr_audit中恢复记录。
我正在考虑使用触发器来进行审计工作和使用程序来进行恢复工作。我知道关键部分是如何在审计和恢复工作中保持父子表的完整性。我需要一些建议。谢谢。
create table emp (
emp_id integer primary key,
version varchar(50)
);
/* Address table */
create table emp_addr (
addr_id integer primary key,
emp_id integer, -- references table emp
line1 varchar(30),
);
/* Audit table for emp table */
create table emp_audit (
operation character(1),
updatetime timestamp,
emp_id integer,
version varchar(50)
);
/* Audit table for emp_addr table */
create table emp_addr_audit (
operation character(1),
addr_id integer,
emp_id integer,
line1 varchar(30),
);
【问题讨论】:
-
您必须要求任何回滚都回滚从现在到该记录及其子记录的目标时间之间的 all 更改,而不是直接恢复目标记录。或者,您可以编写审核记录,在每次任何父项或子项更改时复制父项及其所有子项(例如,json 表示法)。这样您就可以删除父项及其所有子项,然后从目标审计记录中恢复它们。
标签: sql postgresql parent-child audit