0

假设我想在 DWH 系统中实现 SCD type2 历史维度表(或者我应该说具有 SCD type2 属性的表),目前我一直将其实现为带有natural key+ primary surrogate key+ datefrom+ dateto+iscurrent附加列的“常用表”。

在哪里

  • primary surrogate key为了在所有事实表中将其用作外键和
  • datefromdateto需要++列iscurrent来跟踪历史记录。

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

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

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

也许还有另一种方式?

4

1 回答 1

1

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

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

 ROW_NUMBER () OVER (ORDER BY EmployeeID, ValidTo) AS EmployeeKey

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

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

于 2018-05-09T13:14:31.763 回答