使用主键

时间:2018-02-28 13:05:59

标签: ssis etl

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

在destionation表中,PropertyID是主键。程序包运行时,我们会遇到主键冲突错误。这是可以理解的,因为当历史属性发生更改时,目标表无法插入重复值。它可能不是最好的设计。

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

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

感谢。

2 个答案:

答案 0 :(得分:1)

在一个缓慢变化的维度中,目标表将有两种类型的密钥,代理密钥将与事实表绑定,而业务密钥则标识来自源的记录。

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

请参阅此链接... https://en.wikipedia.org/wiki/Surrogate_key

答案 1 :(得分:0)

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