在关系数据库中维护表的版本化副本的智能方法(编程注意事项?)

时间:2009-07-20 01:35:49

标签: sql database relational

我的第二个考虑因素是简单地复制与应用基线的活动文档或文档文件夹相关联的表数据,并将其存储以便安全保存。代码复杂性节省将是巨大的,虽然在存储使用方面存在一些影响,但架构将保持简单(尽管我不相信它会那么大)

2 个答案:

答案 0 :(得分:3)

这也是我在当前项目中面临的问题。一些好的答案here

我个人使用选项#1,在每个“版本化”表的pkey中添加一个版本列。 FKeys也使用版本列。我主要考虑的是易于查询,因为存储要求很高。我有足够的余地来严格限制保留的版本数量,从而减轻了这个问题。

答案 1 :(得分:1)

我真的认为你在找temporal database。我们自己的实现为表添加了一对审计日志标识符,“创建ID”和“删除ID”(修改数据库的每个事务都在“审计日志”中汇总,并给出了唯一的顺序标识符)。对于向表中添加记录的每个事务,审计日志标识符用作创建ID,删除ID为零。更改记录后,新版本具有新的创建ID,并使用相同的标识符作为旧版本的删除ID。

创建一个删除ID为零的表视图非常容易,创建一个仅包含当前数据的虚拟表。您还可以在处理特定事务之前或之后找到表的内容,获取修改表的特定行的事务列表等。

所有这些都有时间,空间和复杂性的惩罚。但对我们来说,处理大笔资金是值得的。