【问题标题】:Archiving Theory归档理论
【发布时间】:2012-01-18 15:31:15
【问题描述】:

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

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

我的另一个想法是为每个项目(即联系人)分配一个 PK,然后每个项目都有一个辅助键,然后将与每个项目相关联。这样做的主要问题是,如果联系人更新实时项目似乎很困难,需要大量更新。

如果您有任何问题,请告诉我。

感谢您的帮助。

【问题讨论】:

标签: mysql sql database archiving


【解决方案1】:

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

例如,对于 ruby​​,您可以使用 vestal_versions 或 paper-trail。

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

【讨论】:

    【解决方案2】:

    您正在寻找的是在您的域数据旁边包含时间数据。这类事情不是一项微不足道的任务,而且通常会导致需要支持它的应用程序变得非常复杂。

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

    1. 审计跟踪
      • 您跟踪对记录所做的更改随着时间的推移,主记录反映了它的当前状态
      • 将数据重复降至最低
      • 可能不适合您轻松寻找的“快照”模型
    2. 最新
      • 您有一个实体的每个“版本”的记录,其中包含创建时间的时间戳
      • 可以轻松跳转回某个时间点
      • 使“分叉”实体变得容易
      • 重复数据最多

    Martin Fowler 撰写了一些与设计处理时间数据的模型相关的文章,因此我将从那里开始为该主题打下良好、扎实的基础。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 2016-03-03
      相关资源
      最近更新 更多