审计表结构

Bob*_*ley 8 database-design

我正在为我的数据库构建审计表,需要选择要实现的样式.我目前正在考虑三个选项,所有选项都将使用触发器填充:

  1. 包含字段id |的单个表 表| 专栏| 行| old_value | new_value | 时间戳| 用户身份.这将在一个位置跟踪所有表的所有更改,并具有最小化表数的好处.它确实使查询有点困难,但并非不可能.
  2. 多个表,如#1,除了没有表列.这会将每个表的更改分成它们自己的历史记录表.
  3. 多个表,用于镜像要跟踪的原始表的模式.这将使触发器更容易编写,如果有人想要恢复到特定记录,将使数据的恢复更容易,但是会以牺牲存储为代价,因为每个字段,即使它没有改变,也会被复制,可能是多次.此外,很难确切地知道哪个字段从一个版本更改为下一个版本.

这三个选项中的每一个都是可行的,据我所知,没有提供的功能在另一个选项中是不可能的.所以必须有一些我没有考虑的东西或一些更标准的模式.如果它有任何区别,这个解决方案必须适用于mysql和sql server(虽然我可以稍后解决代码的细节).

HLG*_*GEM 4

审计表受到的打击非常严重,您不希望只使用一张表来进行所有审计,否则您会遇到阻塞。

我们做了类似于第二点的事情,只是每个表有两个表(一个存储更改实例,另一个存储实际数据。这使得很容易找到存储在表中的一百万条记录导入中的所有记录,例如,因为它们都是同一个实例。这意味着我们可以轻松地编写脚本,在添加新表时创建新的审计表。

对于第二种情况,我建议编写一个过程来恢复特定记录,这样恢复就很容易,而且您不必每次都弄清楚。