2015-10-13 23 views
0

問題概述
引用完整性採用了Inmon風格3NF企業數據模型時,有什麼處理代理鍵和參照完整性一些常見的技巧?在我的情況下,我必須填充一個3NF數據模型,它提供了幾個事務性系統的「企業視圖」。另外,每個OLTP都是分佈式的,因此每個國家有一個實例。因此,我目前面臨的挑戰是將每個源系統整合到一個統一的數據模型中。代理鍵,並在EDW

實際問題
因爲每個國家都有自己的「本地」 PK我需要鞏固這些進入EDW時,處理衝突的戰略。在這種情況下簡單地創建一個複合鍵是最常見的嗎?例如source_id + source_country還是最好在這裏生成代理鍵?

例如:

A.foobar
ID
描述
...

B.foobar
ID
描述
...

將成爲:

EDW.foobar
ID
foobar_id
source_country
描述

所以,在我們結束了一個新的代理鍵(id)合併的數據模型,唯一標識每個源記錄(foobar_id + source_country)。這似乎是合乎邏輯的,但由於某種原因感覺不對此外,因此我的問題是,這對於處理EDW中的參照完整性有什麼影響?即如果我們在源3NF之間生成新的替代密鑰,那麼在整個EDW模式中引用這些新密鑰增加了複雜性。就ETL實現而言,這意味着必須通過現有的FK(源系統)查找新生成的代理鍵,然後將其替換爲新的FK。這意味着在EDW中維護多個FK(一個查找新的代理鍵和新的代理鍵本身),這看起來非常遙遠。

如果有人有這個問題的經驗,那麼我會很感激你的建議,因爲我不認爲我目前的方法會奏效。還有幾個推論主題,例如版本和歷史記錄,以及EDW 3NF和數據集市之間的cdc,這些也在這裏發揮作用,但我會在稍後再討論這些。

N.B.
我所進行的大部分研究都與填充Kimball樣式數據集市有關,而不是Inmon的3NF企業數據模型。此外,我一直在努力尋找合併分佈式數據庫的主題,因爲基礎模式是相同的。

回答

0

生成代理鍵是處理此方案的最常見方法。因此,您將擁有代理鍵​​(它提供了關鍵穩定性和通常更好的數據庫性能),但仍然保持業務關鍵(因爲這將在業務層上呈現)。

這對於處理EDW中的參照完整性有什麼影響?

它不應該有任何。當然,如果這是一個現有的倉庫,並且您引入了一個代理鍵,則您將不得不重構整個倉庫的代理鍵,但這應該是一次性的。倉庫內應該引用代理鍵。

這裏有代理VS業務鍵的話題舊的討論,這是非常值得讀:如果你有你的國家表一個完美的PK Surrogate vs. natural/business keys

0

,你必須形成一個1-1的另一個實體與國家的關係,然後一定要用國家PK作爲這個實體的PK。它也將作爲FK參考國家表格。這形成了一種身份關係。也就是說,一個國家和另一個實體之間的關係如此強大,國家的身份也構成了這個實體的身份。

不要養成在您創建的每張桌子上都放上代理鍵的習慣。即使大多數表格最終都帶有代理鍵,但這樣做的習慣會自動地導致設計懶惰,並隱藏那些代理鍵不是最佳選項的時間。