我有一个表,用于保存可由用户添加和更新的记录。记录有很多字段。有些字段可以进行逻辑分组,有些字段具有相似或相同的数据类型。我需要在数据库中保留对此记录的所有修订。
目前我可以想到两种方法:
方法分析:
你有什么建议?
既然我们处理的是客观问题,我将假设这个答案的空间成功意味着高效的性能和经济的空间使用。
所以,你有一张桌子,比如
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
。