【发布时间】:2019-02-21 09:40:42
【问题描述】:
我有两个源表,一个基本上是发票,另一个是迁移的发票。两者可能应该使用相同的对象,但我有这个。它们包含大部分相同的数据。
我曾想过将两者合并到一个维度表中,但是两者都将使用相同的自然键。我应该如何处理这个?
我想到的一个潜在解决方案是对迁移的表使用负数,但是自然键不会与源完全对齐。
我只是将它们组合在事实表中吗?然后,由于 NULL,我无法链接回维度表。
或者我是否要添加额外的列或信息来指明发票的类型?
编辑
以下当前表格的简单模型。 该维度目前只包含未迁移的数据,它有一个主键,但是 如果我将迁移的发票表合并到此,它将看起来好像正在更改 以原始发票制作,而不是第二套发票
维度
代理键| source_pk |总计 | scd_来自 | scd_to
| | | |
1 | 1 | 100 | 2019 年 1 月 1 日 | 2019 年 1 月 31 日
2 | 1 | 150 | 2019 年 1 月 2 日 | 2019 年 12 月 31 日
3 | 2 | 50 | 2019 年 1 月 1 日 | 9999 年 12 月 31 日
源发票表
pk |全部的 ___________________ 1 | 150 2 | 50
源迁移的发票表
PK |全部的 ___________________ 1 | 200 2 | 300【问题讨论】:
-
您是否考虑过使用自动递增的非业务相关号码(又名 IDENTITY)?您可以保留原始发票 ID,但新身份将是您的主键。
-
更新信息,如有误解,请见谅。我已经在维度上有一个代理 PK,但这无助于复制自然键的问题
-
您不能将来自不同系统的密钥保存在同一张表上而不会遇到麻烦。如果这 2 个代表完全不同的实体(碰巧共享相同的数据),那么您需要以某种方式进行区分,可能为 InvoiceSource 或 InvoiceOrigin 添加另一个维度,并通过 source_pk 和 InvoiceSourceID 强制唯一性(如果需要)。
-
您能否添加一个“source_tbl”列并将 I 或 MI 放入其中作为自然键的附加部分?
标签: sql-server etl data-warehouse