2015-11-13 66 views
0

我想爲一個配置單元表創建一個代理鍵,但每次將數據放在表中時都可以複製。其他表將通過代理鍵引用此表,並且可以重新生成表以添加更多行,並且該關聯不會被破壞。我的想法是基本上有一個表中所有列的組合鍵。所有列散列代理鍵

將所有列連接起來並將該字符串的md5散列用作該行的簡單查找是否合理?

,我用這個解決方案中看到的問題是:

  • 如果行中的數據變化,協會將仍然被打破
  • 有沒有真正的保證哈希值是唯一的(雖然我的數字,衝突是非常不可能)上的數據

筆記:

  • 數據按天分區,每天 大約有10萬行。
  • 有些情況下,兩行有完全相同的數據,並且 如果它們最終具有相同的密鑰,那很好。

回答

0

你已經回答了自己的問題:

有沒有真正的保證哈希值是唯一的(雖然 有我的號碼,碰撞是非常不可能)

密鑰需要獨一無二,這是他們的目的。如果你給我一個記錄密鑰(不管它是代理人還是自然人),我都可以找到該記錄。哈希不會是唯一的。

你需要回去問自己爲什麼你想要這個代理鍵。如果它只是一個唯一的標識符,然後使用您的數據庫的唯一標識符|序列類型並完成它。

如果有業務需求(需要複製SK < - 爲什麼?),那麼回到這個原因,並嘗試爲它提供一個更直接的解決方案。

(我們嘗試了2型變化檢測哈希 - 它沒有工作,我們通過列的比較回到列)

這令我:

在有些情況下是兩行有確切同樣的數據,如果他們最終獲得相同的密鑰

如果你有2條記錄在數據庫中是完全一樣的,那麼你丟失的數據它的罰款:即使一個序列或時間戳,這東西可以用來不同點你的記錄。如果你沒有一個自然的鑰匙,你可能會錯過一些東西。