database - 如何存储数据的变更历史?

标签 database

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

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

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

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

最佳答案

这些通常称为审计表。我通常如何管理它是在数据库上使用触发器。对于来自源表的每个插入/更新,触发器将数据复制到另一个表中,该表称为相同的表名并附加了 _AUDIT(命名约定无关紧要,这正是我使用的)。 ORACLE 为您提供了一种叫做日志表的东西。使用 ORACLE 设计器(或手动)您可以实现相同的目的,开发人员通常会在日志/审计表的末尾放置一个 _JN。然而,这与源表上的触发器将数据复制到审计表中的工作方式相同。

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

关于database - 如何存储数据的变更历史?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9484714/

相关文章:

MySQL 在更新另一个表后触发 INSERT 到表?

database - 尝试使用 || 在 RAISE() 函数中进行连接导致语法错误

mysql - 如何在每个 XX :50 Seconds? 上安排一个 MySQL 事件

mysql - mysql 中的计数查询如果条件匹配则显示计数否则为零

database - postgresql db 表锁定或行锁定多查询执行

php - 在两台机器上保持 2 个 mysql 数据库相同

database - 在文件系统中存储图片时,使用相对路径还是绝对路径?

javascript - 如何防止种子在生产环境中使用 knex.js 运行?

mysql - 如何计算MySQL中表之间的差异?

php - 大型数据集的服务器缓存和客户端缓存之间的区别?