如何在类型 6 SCD 维度表上强制实施引用完整性?



我在设计事实数据表和类型 6 SCD 维度表之间的主键和外键关系时遇到困难。

维度表具有以下定义:

CREATE TABLE DimTable
(
surrogate_key           INT,
row_key                 INT IDENTITY (1,1),
natural_key             INT NOT NULL,
current_value           INT NOT NULL,
historic_value          INT NOT NULL,
is_current              BIT NOT NULL,
record_start_date_id    INT NOT NULL,
record_end_date_id      INT NOT NULL
-- Primary Key
CONSTRAINT pk_dimtable_surrogate_key_row_key PRIMARY KEY (surrogate_key, row_key);  

数据的外观示例:

surrogate_key | row_key | natural_key | current_value | historic_value | is_current | record_start_date_id | record_end_date_id
-------------------------------------------------------------------------------------------------------------------------------
121           | 2591227 | 123456      | 20090807      | 20090807       | 0          | 20180807             | 99991231
121           | 2591228 | 123456      | 20140807      | 20090807       | 0          | 20180807             | 99991231
121           | 2591229 | 123456      | 20141107      | 20140807       | 1          | 20180807             | 99991231
122           | 2591230 | 456789      | 20090807      | 20090807       | 1          | 20180807             | 99991231  

根据我对维基百科页面的理解,我应该能够通过 PK/FK 关系强制执行引用完整性,但是主代理键在此表中不是唯一的,因此我不知道如何将事实表中的surrogate_id指向具有 FK 约束的surrogate_key。

有没有办法绕过这个限制,或者我理解错误?

顺便说一句,这是我第一次在这里提问,所以如果有任何不清楚或遗漏的地方,请告诉我!

编辑:列名是通用的虚拟名称。实际的同名更具描述性。

我相信你误解了SurrogateKey的概念。相反,这里的Row_Key属性更有意义。 我建议去看书来理解代理键。您可能需要在流程中进行大量更改。

相关内容

  • 没有找到相关文章

最新更新