使用PHP和MySQL保留修订历史记录

时间:2011-11-08 13:28:51

标签: php mysql

我有几个表,我想保留修订历史记录。完成此任务的最佳方法是什么?这将是几个领域(20左右)。

我应该创建一个重复的表并只提交旧的数据吗?我应该使用触发器吗?或者我应该创建一个单独的表并只跟踪所做的更改?

4 个答案:

答案 0 :(得分:5)

我们非常满意我们的选择,即每个版本化实体使用两个表。

表格看起来与此相似:

person

  • id (PK)
  • 版本(乐观锁定计数器)
  • 当前(外键引用person_version
  • ...(任何不会改变的财产)

person_version

  • id (PK)
  • person (非null)(外键引用person
  • 时间戳(用于排序)
  • ...(任何可能改变的财产)

由于person_version中的条目不会改变,因此很容易缓存它们(只要没有对可能更改的表的引用)

答案 1 :(得分:3)

Propel这样的ORM可以“本地”处理这种频繁的需求。

检查versionable behavior

  • 它会自动将版本列添加到“版本化”表格(例如 mytable ),并创建 mytable_version 表格(当然包含 mytable_id 版本列。

  • 它提供了一个简单的API来查询版本化表。例如,当您执行$myobject->save();时,它会自动填充表 mytable_version 并相应地更新字段 mytable.version

答案 2 :(得分:2)

这是几个月前我问过的问题,但我会以同样的方式再做一次

Database entries modification history

答案 3 :(得分:0)

您可以在表中添加另一列来跟踪entry-id,而活动PK则是revision-id。具有最高版本ID的那个是最新且活动的记录,具有相同entry-id的其他条目是先前的修订版。