我在设计事实表和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
据我对wikipedia page的了解,我应该能够通过PK / FK关系强制执行参照完整性,但是该表中的主代理密钥不是唯一的,因此我不知道如何指向surrogate_id在我的事实表中添加到FK约束下的surrogate_key。
有什么办法可以解决此限制,还是我理解错误的说明?
顺便说一句,这是我第一次在这里提问,所以如果有任何不清楚或遗漏的地方,请告诉我!
编辑:列名是通用虚拟名。实际的姓氏更具描述性。
答案 0 :(得分:0)
我相信您误解了SurrogateKey的概念。相反,这里的Row_Key属性使SurrogateKey更具意义。 我建议您阅读一本书以了解代理密钥。您可能需要在过程中进行很多更改。