Sql-Server

數據倉庫 - 具有多對多關係的緩慢變化維度

  • March 12, 2021

例如,假設我有一個包含兩個維度和一個度量的事實表

FactMoney 表


ProjectKey int

PersonKey int

現金金額


這兩個維度的定義如下:

DimProject(類型 0 維度 - 即靜態)


ProjectKey int

項目名稱 varchar(50)


DimPerson(第 2 類緩變維度)


PersonKey int

PersonNaturalKey int

人名 varchar(50)

EffectiveStartDate 日期時間

EffectiveEndDate 日期時間

IsCurrent 位


到目前為止非常簡單。現在我將介紹一個人員類別的概念。

昏暗類別


CategoryKey int

類別名稱 varchar(50)


並在 DimPerson 和 DimCategory 之間建立 M2M 關係

橋人類別


PersonKey int

CategoryKey int


所以 - 人們可以有 1..n 個類別。

我的問題是 - 由於 Person 是一個緩慢變化的維度,當一個人的名字發生變化時,我們會添加一個新的人行並更新我們的生效日期和目前標誌,沒什麼大不了的。

但是我們如何處理這個人的類別呢?每次彈出新的人員版本時,我們是否需要向橋接表添加更多行?

作為推論,如果一個人的類別發生變化,這是否意味著我們需要在 person 表中創建一個新行?

(請注意,我也在stack-O上提出了這個問題,並按照第一位評論者的指示,現在在這裡發布了這個問題。)

DimCategory 是否具有您正在跟踪的任何類型 2 屬性?

如果不是,那麼您只需根據 DimPerson 中的類型 2 屬性更改時向橋表添加新記錄,因為您將使用新代理鍵在 DimPerson 中插入新記錄。然後,您需要使用這個新的代理鍵為分配的任何類別添加或更新您的橋接表。

但是,如果 DimCategory 上的屬性發生更改,您只需更新該記錄,代理鍵中不會發生更改,因此橋接表將保持不變。

現在,如果您想跟踪諸如對 Person 的 Category 分配何時更改為 Type 2 屬性之類的事情,那麼您需要在橋表中建構有效開始日期和結束日期,以便能夠知道一個人在什麼時間點類別變化。

引用自:https://dba.stackexchange.com/questions/52628