【发布时间】:2019-04-13 17:25:36
【问题描述】:
(在数据库管理员组上没有得到太多答案,所以在这里试试我的运气)
所以我在“不可变”记录的脑海中产生了这个概念,我确信这并不新颖,但似乎无法找到正确的 google 关键字。
基本上,历史行值需要保留为“过时”,但仍可作为旧记录中的 FK 引用。这些类型的修改很少发生。我正在使用 MySQL,这有点限制。我看到的四种方法是:
天真
- PK 是自动生成的 ID
- obsolete_stamp 是一个时间戳,表示行值是 过时的
缺点:保留历史数据,但无法跟踪更改历史
更好:
- PK 同上
- old_id 是该行修改的行的 id(如果存在)
- obsolete_stamp(如果行数据是最新的,则为 null)
结果:新行是对旧行的修改,但新行必须更新 old_id(如果有的话)
审核:
- 更新触发器在审计表中创建新行
缺点:查询需要检查审计表中是否有过时的行
复合键:
- id + obsolete_stamp
缺点:id不能重新生成,只有当行是'novel'时(没有历史);不清楚如何自动执行此操作。
我正在继续使用“更好”选项,这似乎是跟踪修订历史的最简单方法。
【问题讨论】:
标签: mysql sql versioning