T-Sql

在 DW 中不創建代理鍵有什麼缺點?

  • December 15, 2021

我想從 1 個 OLTP 數據庫創建一個數據倉庫。OLTP 數據庫中的表具有整數主鍵。所以它們是業務關鍵。

這些表是:客戶、客戶、產品和銷售。它們具有主鍵和外鍵關係。

我正在編寫一個 ETL 來將其建模為維度和事實。

我的經理堅持要我創建代理鍵。我知道要實現這一點,我必須先載入維度表(以便它們獲得代理鍵),然後通過使用業務鍵將相應的代理鍵添加到事實表中來載入事實表。我知道當業務鍵是字母數字或大值時這是合適的,但在我的情況下,業務鍵是自動遞增的整數。

在我的情況下,不創建代理鍵有什麼缺點?

即使您的源數據有一個 id 作為業務鍵,您也應該使用自己的代理鍵來管理變化緩慢的維度。

例如,您可以通過這種方式跟踪對具有該產品不同版本的源數據庫中的產品編號 25 所做的更改。

維度範例:

id bk   desc             from       to

1  25  product25         2021-01-01 2021-03-31

2  25  prduct25-versionb 2021-04-01 2021-06-30

3  25  prduct25-versionc 2021-07-01 NULL

沒有代理鍵你不能。

我認為 DWH 中目標表中的代理鍵是有意義的。因為您寫的候選主鍵的含義是,它們代表 DWH 中的事實(例如客戶 3 購買了產品 1)。但是,它們似乎不適用於辨識 DWH 中的記錄(即充當鍵)。

要回答您關於不按照您的經理堅持的做法的缺點的問題:想像 OLTP 中的源數據在它們被帶到 DWH 後發生變化,您需要在目標 DWH 中也反映源數據中的變化。如果沒有代理鍵,您將更改 DWH 中的主鍵(現在我自己也處於這種情況,代理鍵會有所幫助)。

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