【问题标题】:Issues with Slowly Changing Dimension Table with Primary Key使用主键缓慢更改维度表的问题
【发布时间】:2018-02-28 13:05:59
【问题描述】:

我有一个包是由另一位曾在该公司工作的开发人员设计的。包从源中获取数据并将其插入到目标中。渐变维度任务有 4 列,设置为历史属性。这意味着当任何值更改时它将插入一个新行。业务密钥称为 PropertyID。

在目标表中,PropertyID 是主键。当包运行时,我们得到主键冲突错误。这是可以理解的,因为当历史属性发生变化时,目标表不能插入重复值。这可能不是最好的设计。

我想纠正这个问题,但我不确定正确的方法。我尝试将一个新的 INT IDENTITY 列(用作 SCD 向导中的业务键)添加到目标表,并使当前的 PropertyID 列不是主键。但 INT IDENTITY 列未显示在 SCD 向导中。

如果有人能告诉我正确的方法,我将不胜感激。

谢谢。

【问题讨论】:

  • 您希望如何使用 SCD 更改主键。我猜您使用的是 SCD 类型 1,不应该存在主键约束问题,因为它在 2 个不同的列中添加了历史值和新值。 primary key 列保持不变
  • 此处不应使用业务密钥。始终建议仅使用代理键。您的业​​务密钥 (PropertyID) 可以在此处用作唯一密钥

标签: ssis etl


【解决方案1】:

在一个缓慢变化的维度中,目标表将有两种类型的键,一种是与事实表相关联的代理键,另一种是从源中识别记录的业务键。

您不希望业务键作为缓慢变化维度中目标上的主键。这就是 SCD 的重点,因为您正在跟踪更改,所以每个业务键将有多行。如果您不想这样做,并且您的表都是第一类更改(用当前值覆盖),那么 SCD 转换不是您想要的。

查看此链接...https://en.wikipedia.org/wiki/Surrogate_key

【讨论】:

    【解决方案2】:

    看起来您正在尝试设计一个类型 2 SCD,因为更改的记录正在插入。在这种情况下,应该有一个 date 字段来跟踪特定记录的更改时间以及识别当前记录。目标表中的主键也应该在 property_id 和日期字段中。您可以参考以下链接来检查 2 型 SCD 是如何设计的。 http://datawarehouse4u.info/SCD-Slowly-Changing-Dimensions.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      • 2014-07-13
      • 1970-01-01
      • 2019-11-23
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      相关资源
      最近更新 更多