如何跟踪数据库中多字段记录的更改

问题描述 投票:0回答:1

我有一个表,用于保存可由用户添加和更新的记录。记录有很多字段。有些字段可以进行逻辑分组,有些字段具有相似或相同的数据类型。我需要在数据库中保留对此记录的所有修订。

目前我可以想到两种方法:

  1. 为每个更改创建新记录,并以某种方式将其与前一个记录连接起来。
  2. 根据记录中的字段创建尽可能多的新表,并跟踪每个字段的更改。这可能需要一些额外的表来保存修订的通用元数据。

方法分析:

  1. 易于实施。如果大多数字段在修订之间发生更改,则非常有效。
  2. 如果修订之间仅更改少量字段,则可以节省大量内存。

你有什么建议?

database database-design language-agnostic revision-history
1个回答
0
投票

既然我们处理的是客观问题,我将假设这个答案的空间成功意味着高效的性能和经济的空间使用。

所以,你有一张桌子,比如

t(id, c1, c2, ..., cn)

假设您进一步创建一个

t_history
表,例如

t_history(id, t_id, version)

和一个

t_history_changes
表,例如

t_history_changes(id, t_history_id, descriptor, value)

您的

descriptor
可以是一列或一组列,
value
是更改。因此,如果您将 10 个字段更改为具有
value
,那么这将为这 10 个更改创建一个
t_history_changes
,并且您可以在
descriptor
中以某种方式识别它。

您还可以创建插入、更新和删除触发器,这将插入一条新的

t_history
记录以用于记录的插入/更新/删除以及您需要的任意数量的
t_history_changes
记录。当然,对于您删除的记录,您可以为
version
指定一个特殊值。

这些触发器将对更改进行分组并相应地插入

t_history_changes

© www.soinside.com 2019 - 2024. All rights reserved.