我所谈论的一切都与关系数据库(特定的MySQL)有关。

我在数据库中有许多表,对于中等数量,我将要在记录值更改时存储记录值的历史记录。我已经以几种不同的方式看到了这一点:

  1. 一个表/一个字段 - 基本上有一个表存储所有需要历史记录存储的表的历史记录。所有更改都记录在一个字段中,是文本数据类型。
  2. 每个表/一个字段表 - 与上面相同,除了每个表都有其自己的历史表(即项目策略,问题/问题史等)。
  3. 每个表/字段表的表格 - 这与上面的每个表中的表格一样ETC...)。

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

有帮助吗?

解决方案

由于您有很多列的桌子,因此#1将出现,因为您将拥有一个庞大的表格,其中所有列的汇总以及许多空的零件。

在#2&#3之间,我认为您可以决定要管理的设计复杂性。我的观点是,要为给定表维护精确的存档复制品,并存储整个Rowstate(带有修改时间)会更容易。想一想您更新一排以上一列的情况。在那种情况下,即使是相同的事务,也将分别记录一个分别更改列的条目。我会选择W#3以降低复杂性,并捕获时间行状态点。

其他提示

您真的想先阅读:

http://www.cs.arizona.edu/~rts/tdbbook.pdf

如果您想将您的历史记录放在单独的表格中(可能是您这样做),则可能需要选项#3;它往往更容易实现,更方便,#1是#2非常丑陋和“非盟友”。

在某种程度上,这取决于您打算如何使用该数据。如果这是一个严格用来偶尔研究谁改变什么,何时以及偶尔恢复不良变化的审计表,则选项2很好。如果您打算将用户历史记录显示到应用程序或通过报告,请使用选项3。我可以想到任何情况都不会在哪里使用选项,因为它可以使其成为发生阻塞的地方。

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top