Database-Design

代理鍵/主鍵:更好地使用現有的唯一數據欄位或創建鍵欄位?

  • September 11, 2012

我不確定是否有人問過這個問題。至少我找不到。

我對數據搜尋和檢索效率方面的主鍵感到好奇。

這是一個假設的例子……我有一個獨特的學生列表StudentID(比如說10位數長,因為學校永遠不會有那麼多學生)和StudentName(這也是獨一無二的)。

StudentID用作主鍵或為主鍵創建一個新欄位會更好(可能是6 - 8位數字或字元和數字的組合。即ATC1002)?

如果我用StudentName作主鍵,我會看到任何檢索性能下降嗎?如果有,一般大概多少?是否還有其他因素會影響主領域的選擇?

您永遠不應該假設不受系統控制的數據點永遠不會改變。這意味著您不應該假設學生姓名不會改變。在現實世界中,名稱可能會改變的原因有很多。 任何有合理更改風險的東西都不適合作為主鍵。 此外,在任何合理規模的學生群體中,名字都不太可能是唯一的。

對此的一些例外情況可能是由外部標準機構控制的事情,可以合理地信任該機構以保持一致性。這可能包括機場的 IATA 程式碼或原子元素的符號。

關於文本(自然)鍵與整數(代理)鍵的效率,沒有簡單的答案,因為它取決於許多因素。 總的來說,可以說代理整數鍵比自然文本鍵更有效——尤其是當您的文本值遠大於幾個字元時。

然而,自然密鑰除了原始文件 I/O 和 CPU 週期之外還有其他優勢,只要您可以相信自然密鑰是穩定的。學校的學生證可能是一個不錯的選擇,因為您可以製定一項內部政策,規定學生證是終身授予的,永遠不會改變。

引用自:https://dba.stackexchange.com/questions/24048