如何存储数据更改历史记录?

时间:2012-02-28 15:27:12

标签: database

我需要将数据的更改历史存储在数据库中。例如,某些用户有时会修改某些数据的某些属性。预期的结果是我们可以得到一个数据的变化历史,如

Tom    changed title to 'Title one;' 
James  changed name to 'New name'
Steve  added new_tag 'tag23'

根据这些变化历史记录,我们可以获得某些数据的所有版本。

实现这一目标有什么好主意吗?不限于传统的关系数据库。

2 个答案:

答案 0 :(得分:2)

这些通常称为审计表。我通常如何管理这个是在数据库上使用触发器。对于源表中的每次插入/更新,触发器将数据复制到另一个名为相同表名的表中,并附加一个_AUDIT(命名约定并不重要,它只是我使用的)。 ORACLE为您提供称为日记表的东西。使用ORACLE设计器(或手动)可以实现相同的功能,并且开发人员通常会将_JN放在日志/审计表的末尾。但是,它的工作方式相同,源表上的触发器将数据复制到审计表中。

编辑: 我还应该注意,您可以创建一个新的单独模式来管理您的审计表,或者您可以将它们保存在包含源表的模式中。我做两件事,这取决于具体情况。

答案 1 :(得分:1)

我写了一篇关于各种选项的文章:http://blog.schauderhaft.de/2009/11/29/versioned-data/

如果你没有绑定到关系数据库,那么有些东西叫做'仅限附加'数据库(我认为),它永远不会改变数据,只会附加新版本。对于你的情况,这听起来很完美。不幸的是我不知道有任何实现。