首页 > 解决方案 > MySQL 中的版本控制行

问题描述

(在数据库管理员组上没有得到太多答案,所以在这里试试我的运气)

所以我在“不可变”记录的脑海中就有了这个概念,我确信这并不新颖,但似乎无法找到合适的谷歌关键字。

基本上,历史行值需要保留为“过时”,但仍可作为旧记录中的 FK 引用。这些类型的修改很少见。我正在使用 MySQL,这有点限制。我看到的四种方法是:

幼稚的

缺点:保留历史数据,但无法跟踪更改历史

更好

结果:新行是对旧行的修改,但新行必须更新 old_id(如果有的话)

审计

缺点:查询需要检查审计表中是否有过时的行

复合键:

缺点:id不能重新生成,只有当行是'novel'(没有历史);不清楚如何自动执行此操作。

我正在继续使用“更好”选项,这似乎是跟踪修订历史的最简单方法。

标签: mysqlsqlversioning

解决方案


如何维护当前实体的表和历史表?

您将使用on duplicate key update. 它将有一个自动递增的 id 来标识每个实体。

它还有一个insert/update触发器。当插入新行(或覆盖旧行)时,该行将被写入历史表。

历史表可以具有历史表的唯一 ID、插入日期/时间和所有感兴趣的列。此表中的行永远不会被修改。


推荐阅读