(在数据库管理员组上没有得到太多的答案,所以请在这里试试我的运气)
因此,我在“不可变”记录的脑海中有了这个概念,我确信这不是新颖的,但似乎找不到正确的google关键字。
基本上,历史行值需要保留为“过时”,但仍可作为旧记录中的FK引用。这些修改类型很少。我正在使用MySQL,这对事情有所限制。我看到的四种方法是:
天真
缺点:历史数据已保留,但无法跟踪更改历史记录
更好 :
后果:新行是对旧行的修改,但是新行必须更新old_id(如果有的话)
审核 :
缺点:查询将需要检查审计表中是否有废弃的行
复合键:
drawback:仅当行为'novel'(无历史记录)时,才能重新生成id;不清楚如何自动执行操作。
我正在采用“更好”选项,这是跟踪修订历史记录的最简单方法。
答案 0 :(得分:2)
如何维护当前实体的表以及历史记录表?
您将使用on duplicate key update
插入此表。它将具有一个自动递增的ID,用于标识每个实体。
它还会有一个insert
/ update
触发器。当插入新行(或覆盖较旧的行)时,该行将被写入历史记录表。
历史记录表可以具有历史记录表的唯一ID,插入日期/时间以及所有感兴趣的列。该表中的行将永远不会被修改。