【发布时间】:2010-03-07 17:44:47
【问题描述】:
我将开发一个网站,用户将有机会编辑以前提交的表单数据。我被要求做的是通过数据库中某种形式的版本控制系统跟踪所有编辑。我仍然不完全确定我将使用的数据结构,但我正在尝试为这种类型的版本控制系统考虑最佳方法。如果我假设数据库中的大多数表都有可编辑的数据,那么我需要为此提出一种明智且可扩展的方法。
目前,我正在考虑一种简单的方法,即在同一个表中创建一个新行,而不是使用已编辑的数据更新一行。在检索数据以供显示时,查询将根据最新的时间戳行(或某种形式的标志来指示版本顺序)检索数据。我在这里可能遇到的一个问题是,当对一个表的更改应该级联到相关表时。使用 InnoDB 强制引用完整性可能不适用于这种方法,因为会生成新的行/id。这可能需要另一种方法,在该方法中我设置在 UPDATE 语句上激活并处理所有必要的交叉表数据更改的触发器。这可以采取仅创建具有额外列以记录日期/版本号的表的镜像的形式。
如果有人对处理此类事情的一般方法有任何建议,我将不胜感激!
【问题讨论】:
-
Sql server 2008 及更高版本具有称为 CDC(Change Data Capture) 的功能,可维护表中的更改历史记录。请点击链接了解更多信息。 blog.sqlauthority.com/2009/08/15/… 我相信像 Oracle 这样复杂的 DBMS 也有这样的东西。