假设我在数据库中有一条记录,管理员和普通用户都可以进行更新。
任何人都可以建议一个好的方法/架构来控制这个表中的每一个更改,以便可以将记录回滚到以前的版本?
假设您有一个FOO管理员和用户可以更新的表。大多数情况下,您可以针对 FOO 表编写查询。快乐的时光。
FOO
然后,我会创建一个FOO_HISTORY表。这具有表的所有列FOO。主键与 FOO 相同,加上一个 RevisionNumber 列。FOO_HISTORY从to有一个外键FOO。您还可以添加与修订相关的列,例如 UserId 和 RevisionDate。以不断增加的方式在所有*_HISTORY表中填充 RevisionNumbers(即来自 Oracle 序列或等价物)。不要依赖一秒钟内只有一个变化(即不要放入RevisionDate主键)。
FOO_HISTORY
*_HISTORY
RevisionDate
现在,每次更新FOO时,就在更新之前将旧值插入FOO_HISTORY. 您在设计的某个基本级别上执行此操作,这样程序员就不会意外错过这一步。
如果你想从中删除一行,FOO你有一些选择。级联并删除所有历史记录,或通过标记FOO为已删除来执行逻辑删除。
当您对当前值非常感兴趣并且只是偶尔对历史感兴趣时,此解决方案非常有用。如果您总是需要历史记录,那么您可以输入有效的开始日期和结束日期并保留所有记录FOO。然后,每个查询都需要检查这些日期。