【问题标题】:SSIS Business Key Duplicates (more than one LOBS)SSIS 业务密钥重复(多个 LOBS)
【发布时间】:2016-06-06 11:11:21
【问题描述】:

提前感谢您查看此内容。

我已经准备了一个数据仓库,并正在使用来自 2 个系统的客户信息填充客户表。一个系统中的客户与另一个系统中的客户拥有相同的业务密钥。

区分两者的最佳方法是什么,这样我就不会更新记录,也不想保持良好的数据完整性。

我想知道系统标志,但我不确定。

欢迎所有建议/问题。

【问题讨论】:

  • 在主键中添加一个附加字段或使用代表旧系统的前缀

标签: sql ssis data-warehouse data-integrity scd


【解决方案1】:

我同意上面的评论 - “源系统”键是来自源系统的复合键 + 另一个字符串或标识实际源系统的 int。这与前面答案中提到的代理键是分开的。你的维度里真的有两把钥匙。一个是标准的 IDENTITY 代理键 - 没有惊喜。

另一个是复合键,由源系统中的键和一个标识符(我实际上通常只使用一个字符串)组成,它告诉您它来自哪个系统。

所以你的维度看起来像这样:

Customer_SK    SRC_Key    SRC_System    Customer Name
1              5          SAP           Jim       
2              5          MYOB          Joe
  • 您来自 MYOB 的 ETL 代码 > DW 知道只查看 MYOB 数据
  • 您来自 SAP 的 ETL 代码 > DW 知道只查看 SAP 数据
  • 您的数据仓库仅使用 Customer_SK 代理键

随着 DW 的开发和新源系统的引入,您只需不断添加 SRC_Systems

可以按照另一个答案中的建议将它们放在不同的列中,但最终你会得到:

Customer_SK    SRC_Key_SAP     SRC_Key_MYOB    Customer Name
1              5               NULL            Jim       
2              NULL            5               Joe

这似乎有点浪费,并且每次新系统上线时都需要您添加一列。

重要的问题是:两个源系统中是否存在同一个客户?这种设计实际上允许跨行合并。

还要确保您对 SRC_KeySRC_System 设置了唯一约束,因为这有助于提高性能、确保完整性并自行记录密钥。

【讨论】:

    【解决方案2】:

    我个人推荐一个 IDENTITY 列作为代理键。

    【讨论】:

      【解决方案3】:

      正如 Tab Alleman 所说,使用 identity 列作为主键。然后,当我以前遇到过这种情况时,我将两个业务键保存在不同的列中,并根据与每种情况相关的键进行更新。

      这样,您还可以匹配使用多个系统的用户,看看哪里有重叠。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多