包含实体:Collection
和Item
。每个系列都有很多项目。 Collection
和Item
都可以由应用程序的所有用户协作编辑。我必须提供撤消更改的方法。版本控制Item
记录很简单,困难的部分是版本化Collection
和Item
之间的关系。
如何在关系数据库中对此进行建模?
我一直在考虑使用多值Temporal Property。在Collection
和Item
旁边有一个包含vt_from
和vt_to
时间戳的链接表。可能我还需要创建一个CollectionVersion
实体,同时具有vt_from
和vt_to
属性。这些版本将列在该集合的“历史”页面中。但是,我还没有提出恢复变更的通用算法。也许我应该将差异列表(添加/删除)连接到将用于此目的的CollectionVersion
?
答案 0 :(得分:1)
您所描述的内容应该易于使用事件来源进行建模。基本上,您希望将更改存储为集合作为实体。可以通过将与创建相关联的事件集合应用于期望的时间点来计算任何时间的实际集合状态。
http://martinfowler.com/eaaDev/EventSourcing.html
http://codebetter.com/blogs/gregyoung/archive/2010/02/20/why-use-event-sourcing.aspx