2013-07-23 23 views
0

示例:使用兩個Id是個好主意?表中的

------------------------------------ 
| Id | ItemId | Description | Price | 
------------------------------------ 

兩標識的(IdItemId和)是既獨特又自動生成。它們之間的區別在於,第一個Id(Id)用作表內標識的經典Id,第二個Id(ItemId)用作項目標識字段,並且抵制表清理(執行經典Id的重置)和遷移。

這是個好主意嗎?爲什麼?請解釋。

+2

Whats * classic Id's reset *? –

+0

當我們重新排列行時,再次敘述它們的Id。 此外,當我們在表格/列表之間傳輸數據並且不想丟失原始識別碼時,這也許很有用。 –

+1

這通常是一個壞主意。你會這樣做到數百萬行表和相關的FK?我不這麼認爲。 –

回答

2

這是非常普遍的做法來實現(至少)每桌兩個密鑰:代理鍵,通常(在你的例子Id)用於參照完整性目的和自然鍵 - AKA 域密鑰業務密鑰 - 用作業務域中的標識符(在您的示例中大概爲ItemId)。

使用代理並不是一個好主意。您應該根據具體情況決定您要實施的每個密鑰的預期用途和優點。不要以爲一種設計模式適合所有人。作爲一個非常普遍的規則,選擇和設計密鑰的一些好的標準是密鑰屬性的熟悉性,簡單性和穩定性。除此之外,業務規則應該確定你需要什麼鍵。有足夠的密鑰來準確建模業務域並保持數據完整性。

在術語的一個點,不要使用這個詞編號如果你真的是關鍵。 Id太模糊並且過載。在關係/ SQL數據庫中,行由鍵標識。對於列名稱,Id是可以的,但不能用正確的方式來描述表格設計或提出這個問題。

1

其實完全取決於你的要求。如果你的要求說你需要身份認證,那麼理想的做法是使用ID列不是一個好習慣,它在數據級別沒有意義,並且很難將ID列作爲外鍵。建議您僅在您的數據中沒有自然主鍵的情況下使用Identity列。

相關問題