2011-11-08 79 views
6

我有几张表,我想保留修订历史记录。什么是完成这个最好的方法?这将是几个领域(20左右)。保持与PHP和MySQL的修订历史记录

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

+3

你想你的版本可能会改变对表的任何引用)表或修改表中的数据? –

回答

2

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

Database entries modification history

+0

我想过这样做,我可能会这样做。只是想看看是否有其他选择。 – Keith

+0

我对此有一个疑问。在数据字段中,您只是序列化已更改的数据或所有数据?如果只是变化的数据,你如何计算出哪些数据实际发生了变化? – Keith

+0

我在更新之前序列化所有数据,这样它就可以适应表结构的变化 –

0

您可以在您的表格中添加另一列,用于跟踪入口ID,而主动PK则是修订ID。修订版本号最高的是最新的活动记录,具有相同入口标识的其他条目是以前的修订版本。

+0

我打算这样做,但问题是有其他表链接到此表的主键。所以,如果我插入一个新行,关系就会中断。 – Keith

3

Propel一些奥姆斯可以“原生地”处理这种经常需要。

检查versionable behavior

  • 它会自动添加一个版本列到 “版本” 表(比如MYTABLE),并创建一个mytable_version表(含肯定列mytable_id版本)。

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

5

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

表将类似于此:

person

  • ID(PK)
  • 版本(柜台乐观锁)
  • 当前(国外关键参考person_version
  • ...(这不会改变任何属性)

person_version

  • ID(PK)
  • (NOT NULL)(外键引用person
  • 时间戳(用于分类)
  • ...(任何属性tha牛逼可能会发生变化)

正如person_version条目永远不会改变,很容易对它们进行缓存(只要有不