小编典典

如何对数据库中的记录进行版本控制

all

假设我在数据库中有一条记录,管理员和普通用户都可以进行更新。

任何人都可以建议一个好的方法/架构来控制这个表中的每一个更改,以便可以将记录回滚到以前的版本?


阅读 69

收藏
2022-07-17

共1个答案

小编典典

假设您有一个FOO管理员和用户可以更新的表。大多数情况下,您可以针对 FOO 表编写查询。快乐的时光。

然后,我会创建一个FOO_HISTORY表。这具有表的所有列FOO。主键与 FOO 相同,加上一个 RevisionNumber
列。FOO_HISTORY从to有一个外键FOO。您还可以添加与修订相关的列,例如 UserId 和
RevisionDate。以不断增加的方式在所有*_HISTORY表中填充 RevisionNumbers(即来自 Oracle
序列或等价物)。不要依赖一秒钟内只有一个变化(即不要放入RevisionDate主键)。

现在,每次更新FOO时,就在更新之前将旧值插入FOO_HISTORY. 您在设计的某个基本级别上执行此操作,这样程序员就不会意外错过这一步。

如果你想从中删除一行,FOO你有一些选择。级联并删除所有历史记录,或通过标记FOO为已删除来执行逻辑删除。

当您对当前值非常感兴趣并且只是偶尔对历史感兴趣时,此解决方案非常有用。如果您总是需要历史记录,那么您可以输入有效的开始日期和结束日期并保留所有记录FOO。然后,每个查询都需要检查这些日期。

2022-07-17