是否可以在事实维度DWH设计中使用系统版本的时态表?

时间:2018-05-09 11:54:37

标签: sql-server sql-server-2016 data-warehouse sql-data-warehouse temporal-tables

假设我想在DWH系统中实现SCD type2历史维度表(或者我应该说具有SCD type2属性的表),现在我已经将其作为“常用表”实现了natural key + { {1}} + primary surrogate key + datefrom + dateto其他列。

其中

  • 需要iscurrent才能在所有事实表和
  • 中将其用作外键
  • primary surrogate key + datefrom + dateto列需要跟踪历史记录。

现在我想在事实维度DWH设计中使用系统版本的时态表,但MSDN表示:

  

时态表必须定义主键才能进行关联   当前表和历史表之间的记录,以及   历史记录表不能定义主键

所以看起来我应该使用iscurrent生成“动态”或其他ETL过程的视图,但我不喜欢这两个想法......

也许有另一种方式?

1 个答案:

答案 0 :(得分:1)

您可以在数据仓库的持久暂存区域中使用Temporal Table。然后,您可以简单地应用源系统中的更改,而不会丢失任何历史版本。

然后,当您查询或构建维度数据集市时,您可以将事实加入维度的当前版本或历史版本。请注意,您不需要需要代理键来执行此操作,但您可以生成它们以简化和​​优化查询维模型。您可以使用类似

的表达式生成代理键
ExpectedConditions.elementToBeClickable(element)

然后像往常一样加载事实表时加入维度表。

但有趣的是,这可以推迟您的维度建模,并且您可以选择SCD类型,直到您真正需要它们为止。减少和推迟数据集市设计和实施可帮助您更快地实现渐进式增长。您可以使用持久性暂存区域(或者如果您更喜欢该术语的“数据湖”)的视图自信地提供一组初始报告,同时您对数据集的设计思维也在不断发展。