对数据库中的大型集合进行版本控制以进行撤消

时间:2009-12-27 14:01:04

标签: sql database database-design version-control wiki

包含实体:CollectionItem。每个系列都有很多项目。 CollectionItem都可以由应用程序的所有用户协作编辑。我必须提供撤消更改的方法。版本控制Item记录很简单,困难的部分是版本化CollectionItem之间的关系。

  • 对集合允许的操作包括:在指定位置插入项目删除项目并更改列表中项目的位置(可以看作是位置的插入+前一个位置对的删除。)
  • 将频繁调用插入操作。有时,批量导入可以将数千个项目插入到集合中。我应该能够恢复这样的导入,并且撤消不应该花费太多时间来执行。
  • 该清单可包含20 000件以上的物品。我宁愿不能在每次更改时复制整个集合。
  • 我应该能够看到给定修订版集的状态,以发现修订版中的更改。

如何在关系数据库中对此进行建模?

我一直在考虑使用多值Temporal Property。在CollectionItem旁边有一个包含vt_fromvt_to时间戳的链接表。可能我还需要创建一个CollectionVersion实体,同时具有vt_fromvt_to属性。这些版本将列在该集合的“历史”页面中。但是,我还没有提出恢复变更的通用算法。也许我应该将差异列表(添加/删除)连接到将用于此目的的CollectionVersion

1 个答案:

答案 0 :(得分:1)

您所描述的内容应该易于使用事件来源进行建模。基本上,您希望将更改存储为集合作为实体。可以通过将与创建相关联的事件集合应用于期望的时间点来计算任何时间的实际集合状态。

http://martinfowler.com/eaaDev/EventSourcing.html

http://codebetter.com/blogs/gregyoung/archive/2010/02/20/why-use-event-sourcing.aspx