我正在維護一個數據倉庫,其中包含多個關於必須合併的實體類的數據源。每個來源都有一個自然鍵,並且應該發生的是,始終爲每個自然鍵創建一個且僅有一個代理鍵。如果來自具有特定自然鍵的源系統的一個記錄表示與來自具有不同自然鍵的另一個源系統的另一個記錄相同的實體,則相同的替代鍵將被分配給兩者。換句話說,如果源系統A具有與源系統B的自然鍵DEF相同的實體的自然鍵ABC,那麼我們將爲兩者分配相同的代理鍵。該表如下所示:保證唯一代理鍵分配 - 非二分圖最大匹配
SURROGATE_KEY SOURCE_A_NATURAL_KEY SOURCE_B_NATURAL_KEY
1 ABC DEF
這是計劃。但是,這個系統已經投入生產了一段時間,而且代理鍵分配一團糟。在源系統B知道它之前,源系統A將在一天內給出自然密鑰ABC。 DW爲其分配了代理鍵1。然後源系統B開始給出自然鍵DEF,這與源系統A的自然鍵ABC表示相同的東西。 DW錯誤地給了這個組合代理鍵2.表看起來像這樣:
SURROGATE_KEY SOURCE_A_NATURAL_KEY SOURCE_B_NATURAL_KEY
1 ABC NULL
2 ABC DEF
所以倉庫是一團糟。比這更復雜的情況。我有一個簡短的清理時間表,需要找出一組乾淨的代理鍵來自然鍵映射。
一個小Googling表明,這可以在非二分圖被模擬成一個匹配的問題:
MIT 18.433 Combinatorial Optimization - Lecture Notes on Non-Bipartite Matching
我需要一個容易理解的實現(不是最佳表演)愛德蒙的路徑,樹木和花朵算法。我沒有正式的數學或CS背景,而我所擁有的是自學成才的,今晚我並沒有進入數學領域。誰能幫忙?深受讚賞的是,一篇寫得很好的解釋指導我實施。
編輯:
數學方法是最優的,因爲我們要最大限度地提高全球健康。一個貪婪的方法(首先採取A的所有實例,然後B,然後C ...)將您繪製到當地最大角落。
在任何情況下,我都會將這個推回到業務分析師手動執行(全部2000萬)。我正在幫助他們評估全球比賽質量。這是理想的,因爲他們是反正簽署的,所以我的背面被覆蓋。
不使用代理鍵不會改變匹配問題。仍然有1:1的自然鍵映射必須被發現和維護。代理鍵是一個方便的錨,僅此而已。