2016-01-20 64 views

回答

2

答案的最簡單部分是關於事實表。沒有更改,無論維度類型如何。這是因爲事實和維度之間的關係是維度的替代關鍵。

對於維度,您需要確定哪些列可以更改,以及是否需要知道其以前的值。

如果沒有列可以更改,那麼SCD0通常是最合適的。你可能會用它來表示日曆,也許這裏的數據是不變的,除非我們恢復到中世紀的教皇而不是原子鐘:)

有時你不在乎以前的值,只有當前的值無論事實的年齡如何,價值都很重要。這裏的一個例子可能是客戶的電話號碼。我說「可能」,因爲這個意義取決於商業規則。這些是SCD1維度。

如果我們關心之前的歷史,我們需要在SCD2和SCD3之間做出選擇。

每次維度數據更改時,SCD2都會創建一個新行。業務關鍵保持不變,但與新時間段有關的事實將具有新的行替代關鍵。一個例子可能是客戶地址,其中客戶始終由業務密鑰C12345標識,但事實表指向ID 13,987和2465,表示該客戶轉移房屋,城鎮等時的地址變化。

SCD3在當前行中保持「前一個」值。如果我們需要知道的是一個字段的當前值及其以前的值,那麼每次該值發生更改時,我們不需要創建一個新行。更新SCD3維度需要將「當前」值轉換爲「先前」值,然後將新值寫入「當前」值。

現在,術語會變得有點混亂,因爲維度實際上可以將所有這些類型合併爲一個。考慮理論上的銀行賬戶尺寸:

  • ID(代理鍵)
  • 數(業務鍵)
  • 帳戶名稱(SCD1,根據業務規則)
  • 期初餘額(SCD0)
  • 授權簽字人(SCD2,我們希望記錄誰在某個時間點被授權)
  • 客戶關係經理(SCD3,我想要當前和以前的)

SCD類型告訴我在這些列中的任何一列發生變化時需要更新哪些內容。

  • SCD0:該值永遠不會改變,不需要更新。
  • SCD1:更新商業密鑰的所有行。
  • SCD2:創建一個新的行每當這個值改變
  • SCD3:更新所有以前和當前值業務鍵

金博爾進一步定義SCD4-6,但這些都是更常用。我不會深入細節,這個答案已經夠長:)

最後,還有基數的問題需要考慮。如果您的事實一次可能與多個維度行相關,那麼您可能需要一個Bridge表來處理關係。

總結:

  • 事實表包含外鍵維度表的
  • 尺寸行是通過代理鍵確定
  • 有可能是給定的業務重點多維度行,取決於歷史要求。
相關問題