如何保存历史记录?

Dat*_*bie 5 mysql database-design

存储历史记录的最佳实践方法是什么?

我有一个实体,其行会不断更新。我需要跟踪每一行的历史记录。在任何给定时间都会有大约 40K 条“当前”记录,每条记录都会每天更新大约 60 天,然后更新将停止。

我在这里看到两个选择:

  1. 所有当前和历史记录都在一个表中 - 因为每一行都有一个 id,它允许我识别哪些记录属于同一组。

  2. 当前记录和历史记录位于单独的表中 - 每次更新当前记录时,都会将更新前的副本放入历史表中。历史表会有一个 FK。

还有其他我没有考虑过的选择吗?哪个选项更适合我想做的事情?

Duf*_*ffy 1

有一些支持 MySQL 的开源变更数据捕获工具,您可以在此答案中找到其中一些工具:MySQL 有变更数据捕获的版本吗?

如果您选择自己处理,我个人会推荐选项#2。一些简单的触发器可以自动将新的/修改的行复制到另一个表中,并且您可以在历史表中添加一些列以帮助跟踪正在发生的情况,而无需接触任何使用主表的查询。该解决方案是可扩展的,并且从查询的角度来看很容易处理。