2011-11-24 69 views
0

我有一堆我正在視圖中加入的表。我需要視圖中的每個結果行都有一個唯一的ID ...不一定是一個GUID,但是某些值可以唯一地標識每行......並且進一步可以分解爲相應的主鍵,用於構造獨特的價值。複合可分解唯一密鑰

起初我用公式這裏建議: Formula for Unique Hash from Integer Pair

...而這效果很好,但現在我已經遇到的問題是,IDS可以整數地址空間之外運行...甚至可能會在bigint地址空間之外(稍微)運行。

有人可以提供一個關於如何解決這個問題的建議(也許通過創建一個複合guid而不是數值)?

+1

爲什麼要試圖將多個鍵合併成一個呢?你不能只是將每個表的主鍵作爲單獨的列添加到視圖中嗎? *這些*的組合將是唯一的,您不必擔心溢出或計算。 –

+0

一個非常好的點...但不幸的是,由於我們的ORM的約束,不可能的。 – Jeff

+0

出於興趣,哪個ORM?也許你可以發佈一個答案[這裏](http://stackoverflow.com/questions/218100/orm-support-for-compound-primary-keys);) – onedaywhen

回答

2

這聽起來太簡單了,但是您是否考慮過創建一個由各種主鍵組成的varchar字段,可能由一些分隔符分隔?

select 
    cast(tableA.id as varchar) + '-' + 
    cast(tableB.id as varchar) + '-' + 
    cast(tableC.id as varchar) as compositeKey, 
    tableA.foo //etc... 
+1

+1也許不是最好的表演解決方案,但它橫跨了我的腦海至。這將很容易實施。 –

+0

是的,很容易實現...但我想使它在尋找方面更具性能。我想在視圖列上創建一個唯一的聚集索引。 – Jeff

+1

@ JeffN825 - 創建一個唯一的聚集索引不會是一個varchar列的問題,但我想知道你將如何啓動搜索(在varchar或integer列上)。 –