【发布时间】:2010-11-18 21:36:23
【问题描述】:
我正在为我的数据库构建审计表,并且需要选择要实现的样式。我目前正在考虑三个选项,所有这些选项都将使用触发器填充:
- 具有字段 id 的单个表 |表|专栏 |行 |旧值 |新值 |时间戳 |用户身份。这将在一个地方跟踪所有表的所有更改,并有利于最大限度地减少表的数量。这确实使查询有点困难,但并非不可能。
- 多个表,如 #1,但没有表列。这会将每个表中的更改分离到它们自己的历史表中。
- 镜像要跟踪的原始表的架构的多个表。这将使触发器更容易编写,如果有人想恢复到特定记录,会使数据恢复更容易,但会以存储为代价,因为每个字段,即使它没有改变,也会被复制,可能多次。此外,很难具体了解哪些字段从一个版本更改为下一个版本。
这三个选项中的每一个都是可行的,据我所知,没有一个提供的功能在另一个选项中是不可能的。所以一定有一些我没有考虑的东西或者一些更标准的模式。如果有什么不同,这个解决方案必须同时适用于 mysql 和 sql server(虽然我可以稍后制定代码的细节)。
【问题讨论】:
-
我实现了3号的版本。在SQL Server中,触发器可以识别出每一列已经被修改过。我将它与修改的整行 + 一些审计特定列(审计日期时间、用户信息等)一起存储。我存储散列,但创建一个视图来解码散列并列出受影响的列。
标签: database-design