3

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

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

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

请让我知道,如果你有任何问题。

感谢您的帮助。

4

2 回答 2

0

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

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

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

于 2012-01-18T15:41:12.027 回答
0

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

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

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

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

于 2012-01-18T15:54:20.073 回答