以下情況的一般準則是什麼?從外部系統生成的主鍵
您需要創建一個表,其中PK是從外部系統生成的值。它是獨一無二的,類似於使用SSN。
這是否是有意義的主鍵?特別是考慮到它將用於與其他兩個表的外鍵關係。或者,除了唯一鍵之外,創建自動遞增ID字段還是更好,並在表關係中使用自動遞增ID?
以下情況的一般準則是什麼?從外部系統生成的主鍵
您需要創建一個表,其中PK是從外部系統生成的值。它是獨一無二的,類似於使用SSN。
這是否是有意義的主鍵?特別是考慮到它將用於與其他兩個表的外鍵關係。或者,除了唯一鍵之外,創建自動遞增ID字段還是更好,並在表關係中使用自動遞增ID?
個人而言,我不會信任外部系統的ID。當然,他們會在今天向你承諾它將是獨一無二的,永不改變,永遠不會被重複使用。但是,在未來的某一天...
創建您自己的自動遞增ID並將其用於PK和FK關係。保留其ID只作爲參考。
我會一直創建自己的代理主鍵,並將自然標識符設置爲輔助唯一鍵。
Scott W Ambler對兩種策略here有很好的比較。
使用你自己的自動生成的ID會給你一個表中的另一個領域與多餘的信息。如果外部身份證與SSN相似,我想你幾乎不會收到重複。我選擇將外部ID作爲PK。
與使用遞增整數相比,您是否發現使用非順序標識符(如SSN)會導致索引碎片問題? –