我需要将数据的更改历史存储在数据库中。例如,某些用户有时会修改某些数据的某些属性。预期的结果是我们可以得到一个数据的变化历史,如
Tom changed title to 'Title one;'
James changed name to 'New name'
Steve added new_tag 'tag23'
根据这些变化历史记录,我们可以获得某些数据的所有版本。
实现这一目标有什么好主意吗?不限于传统的关系数据库。
答案 0 :(得分:2)
这些通常称为审计表。我通常如何管理这个是在数据库上使用触发器。对于源表中的每次插入/更新,触发器将数据复制到另一个名为相同表名的表中,并附加一个_AUDIT(命名约定并不重要,它只是我使用的)。 ORACLE为您提供称为日记表的东西。使用ORACLE设计器(或手动)可以实现相同的功能,并且开发人员通常会将_JN放在日志/审计表的末尾。但是,它的工作方式相同,源表上的触发器将数据复制到审计表中。
编辑: 我还应该注意,您可以创建一个新的单独模式来管理您的审计表,或者您可以将它们保存在包含源表的模式中。我做两件事,这取决于具体情况。
答案 1 :(得分:1)
我写了一篇关于各种选项的文章:http://blog.schauderhaft.de/2009/11/29/versioned-data/
如果你没有绑定到关系数据库,那么有些东西叫做'仅限附加'数据库(我认为),它永远不会改变数据,只会附加新版本。对于你的情况,这听起来很完美。不幸的是我不知道有任何实现。