多版本实体数据库设计

9

我目前正在处理一个项目,需要在数据库中保留给定实体的多个版本。

例如,假设我们有一个名为House的实体,其中包含房间。现在,每当从房屋中添加、更新或删除房间,或者更改房屋或任何房间的属性时,我们都需要保留旧信息和新信息。最好将更改分组到“更改集”中(实际上这个问题有点像源代码控制)。

现在实际模型比这个复杂得多,但我认为这个例子说明了问题。

我非常希望听到一些可能的解决方案。

我们正在运行Microsoft SQL Server 2008 R2。

1个回答

14
在数据仓库中,通常使用慢变化维度(SCD)来解决这个问题。
简要总结如下:
  • 创建一个替代键(实例ID),并使用自然键和版本号(或有效日期/时间范围)来跟踪更改(Type 2 SCD)
  • 在您的房间表中有N列用于N个版本(Type 3 SCD)
  • 有一个单独的“rooms_history”表,并仅在rooms表中保留当前实例(Type 4)
我的团队传统上使用Type 2(用于更“近期”的数据)和Type 4(用于存档中的“旧”数据)的组合。我们使用正在更改的对象中的change_id分组更改,该对象是指包括更改日期以及其他元数据(用户、注释等)的change对象的引用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接