存档理论

时间:2012-01-18 15:31:15

标签: mysql sql database archiving

我即将建立一个新数据库,需要包含仍可访问的记录存档。记录都与某些项目相关联,当项目存档时,我希望记录保持不变,即快照。 (例如,如果联系人与已归档项目相关联,并且他们在一年后移动,我希望它仍然可以提取旧地址。)归档记录不需要更新,但确实需要可以访问。

我知道如何解决这个问题,但我不确定这是否是最佳方法:每个表的副本都会“存档”所有内容,然后将项目放入存档时,所有FK / PK关系会更新,但这似乎是一个繁琐的过程。

我的另一个想法是每个项目(即联系人)将被分配一个PK,然后每个项目将有一个二级密钥,然后与每个项目相关联。这个问题的主要问题是如果联系人更新现场项目似乎很困难,需要进行大量更新。

如果您有任何疑问,请与我们联系。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

嗯...我唯一一次遇到这样的事情,有想法在应用程序层解决它,而不是在db上。

例如,对于红宝石,你可以使用vestal_versions或paper-trail。

例如,

Paper-trail将所有对象的版本作为序列化对象存储在一个表中,并与增量一起使用。

答案 1 :(得分:0)

您要寻找的是在您的域数据旁边包含时态数据。这类事情不是一项微不足道的任务,而且往往是需要支持它的应用程序中复杂化的原因。

有很多方法可以实现这一点,每种方法各有利弊,您选择的方式取决于您需要对数据的时间元素做什么。其中一些包括:

  1. 审计跟踪
    • 您跟踪记录随时间的变化,主记录反映了当前状态
    • 将数据重复减少到最低程度
    • 可能不适合您正在寻找的“快照”模型
  2. 最新潮流
    • 您有一个实体的每个“版本”的记录,其时间戳为创建时间
    • 让您轻松跳回某个时间点
    • 轻松“分叉”实体
    • 拥有最多的数据重复
  3. Martin Fowler撰写了一些与设计处理时态数据的模型相关的文章,因此我将从那里开始,为该主题提供良好,坚实的基础。