无需为每个表创建历史记录/审核表。您可以拥有一个表,其中存储您要跟踪的字段的表和字段名称:
audit(audit_id, table_name, field_name, action_flg, updated_by, updated_on, val_before, val_after, pk_value1, pk_value2, pk_value3, pk_value4, pk_value5)。
您需要存储表的主键(字段pk_value1to pk_value5),以便唯一标识已更改的行。action_flg如果您想要跟踪更新、插入或已删除的行,则使用。Oracle 在其一些产品中使用这种表结构。
例如,假设您有一个表person(person_id, name, email),并且需要跟踪对该字段所做的更改email:
id=1创建一个新人 ( ):insert into audit(1, 'person', 'email', 'A' /* add */, 'USER', '11-03-2011', null, 'email@mail.com', 1, null, null, null, null);
人员的电子邮件1已更新:
insert into audit(2, 'person', 'email', 'C' /* change */, 'USER', '12-03-2011', 'email@mail.com', 'new_email@mail.com', 1, null, null, null, null);
现在假设人员的电子邮件70已更新:
insert into audit(3, 'person', 'email', 'C' , 'USER', '12-03-2011', 'p70email@mail.com', 'new_p70mail@mail.com', 70, null, null, null, null);