存储对记录的更改

rya*_*zec 5 mysql change-management

我所说的一切都与关系数据库,特定的 MySQL 相关。

我在一个数据库中有许多表,对于其中一些,我想要在记录值更改时存储记录值的历史记录。我已经看到这以几种不同的方式完成:

  1. 一张表/一个字段 - 基本上有一张表存储所有需要历史存储的表的历史记录。所有更改都作为文本数据类型记录在一个字段中。
  2. 每个表/一个字段的表 - 与上面相同,除了每个表都有自己的历史表(即项目/项目历史、问题/问题历史等...)。
  3. Table Per Table/Field Per Field - 这就像上面的每个表都有自己的历史表,但历史表的定义与常规表几乎相同,并增加了额外的历史相关字段(updateDatetime、updateUserId、等等...)。

这些不同的记录历史存储方法有哪些优缺点?还有其他我没有想到的方法吗?

Eri*_*ins 3

由于您有许多具有不同列数的表,因此 #1 将会被淘汰,因为您将拥有一个包含所有列的聚合的大型表,并且有大量空值。

在#2 和#3 之间,我认为您需要根据想要管理的设计复杂性做出决定。我的观点是,为给定的表维护精确的存档副本并存储整个行状态(带有修改时间)会更容易。考虑一下您更新一行中多个列的情况。在这种情况下,#2 将单独记录列更改的条目,即使它是同一事务。我会选择 #3 来降低复杂性并捕获时间点行状态。