簡體   English   中英

即使表僅包含一列並且表本身包含唯一值,使用代理主鍵也是一種好習慣嗎?

[英]Is it a good practice to use surrogate primary key even if the table contains only one column and that itself contains the unique values?

我的gender表為: gender_id | gender_label gender_id | gender_label
如果我刪除了gender_id列,這是一個不好的做法,因為gender_label也是唯一的並且可以用作主鍵?
我知道應該盡可能使用代理鍵,因為它們高效且快速地搜索。 但這對上述情況有什么影響嗎? 怎么樣?

我寫了幾百張桌子。 其中2/3具有“自然”鍵; 1/3有一個“代理鑰匙”。

由此,我推斷出您問題的答案是“取決於”。

好的,那取決於什么?

  • 是否有可靠的自然鑰匙-真正UNIQUE鑰匙? 如果是這樣, 可能您應該使用它。
  • 性能是一個問題嗎?嗯,這是雙向的。
  • 自然鍵是“小”嗎? 我認為,從國際標准中提取的2個字符的country_code優於4字節的INT
  • 如果自然鍵為“大”並且有多個輔助鍵,則請記住,每個輔助鍵都包含PK。 (在InnoDB中)
  • 通過輔助鍵進行查找涉及(在InnoDB中),首先在輔助鍵的BTree中進行向下鑽取,然后在PK的BTree中進行向下鑽取。 因此,擁有大量使用的PK可能會帶來輕微的性能提升。 (這可能是替代的,也可能是自然的。)

在您的簡單情況下,是否像M / F / etc這樣的gender_id字符串? 那就是我會用的。 實際上,我可能根本沒有桌子。 而是在其他表格中使用gender作為ENUM('unknown', 'male', 'female', 'other')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM