我知道代理主鍵通常推薦使用自然主鍵,但是在用戶名方面有沒有任何支持代理主鍵的參數?用戶名是主鍵的有效候選者嗎?
回答
如果您不想獲取重複的用戶名,請創建一個UNIQUE constraint
。
如果DWong1145
想要更改它的用戶名呢?你會使所有的數據庫關係爲UPDATE CASCADE
?
從客戶的角度來看,你打賭。我不希望我的用戶名是DWong1145。
否,您應該使用用戶名只作爲唯一鍵/常量。用戶名可以更改,只是舉例而已:它可能是商標,所有者請求您放棄它。
聽起來有點簡潔;)你*是*權利雖然。我討厭你不能更改你的用戶名的系統 - 但是,OP在評論中說他不希望它被改變,所以... – 2010-01-27 15:12:52
這是一個很好的候選人,但是你必須考慮你是否真的想要這樣做。例如,您有一個具有某個用戶名的用戶,則用戶將被「刪除」(或標記爲已刪除)。因此,實際上沒有理由不允許使用相同的用戶名創建另一個用戶,但由於它是主鍵,因此它已被「取用」。
將字符串作爲主鍵的一個很大的缺點是,無論是用戶名還是其他名稱,所有引用表的外鍵列也必須是字符串,這樣既慢又浪費更多空間。
它不一定要慢。好的數據庫引擎可以預先散列任何字符串值。最重要的是,使用自然鍵可能會消除對應用程序中的許多連接的需求,從而加快查詢速度。我承認,自然鑰匙通常會消耗更多的空間,但誠實地說,空間便宜而豐富。 – 2010-07-28 08:40:55
- 1. 主鍵也是超級鍵和候選鍵嗎?
- 2. 候選鍵和主鍵是什麼?
- 3. SQL錯誤:「引用表中沒有主鍵或候選鍵......」
- 4. 有時候[]是可選的嗎?
- 5. 所有候選鍵都是超級鍵,而所有超級鍵都不是候選鍵。爲什麼?
- 6. 對主鍵使用現有的候選鍵或新的組合鍵
- 7. 錯誤有在引用表上沒有主或候選鍵
- 8. SQL錯誤 - 有沒有主或候選鍵在引用表
- 9. 有在引用表上沒有主或候選鍵
- 10. 引用表中沒有與引用列相匹配的主鍵或候選鍵
- 11. 這些關係是多態關聯的良好候選者嗎?
- 12. 不包含與引用匹配的主鍵或候選鍵
- 13. 不能創建外鍵「有被引用表中沒有主或候選鍵」
- 14. 有狀態的DLL是狀態模式的良好候選者嗎?
- 15. 主鍵,唯一鍵和候選鍵之間的區別
- 16. 有在參照表中沒有主或候選鍵 '標籤'
- 17. 這是表的有效用法嗎?有更好的選擇嗎?
- 18. 是`column`有效的mysql列名嗎?
- 19. 我可以擁有比列更多的候選鍵嗎?
- 20. 主鍵和候選鍵之間的區別
- 21. 這種關係中的主要關鍵和候選關鍵是什麼?
- 22. LINQ是一個有效的選項嗎?
- 23. 如果我有多個候選鍵,哪一個是主鍵並證明您的選擇正確?
- 24. 零在主鍵有效
- 25. 是否保證主機名是有效的Windows目錄名?
- 26. 查找關係的所有候選鍵
- 27. 候選鍵或超級鍵
- 28. 被引用表'PayRoll'中沒有與外鍵'fk_EmployeeNumber'中的引用列表匹配的主鍵或候選鍵'
- 29. 主鍵也是索引嗎?
- 30. 有在引用表上沒有主或候選鍵的引用列列表中的外鍵
我的問題是在一個認證系統的背景下,不會允許用戶名更改。我應該提到這一點。 – 2010-01-27 09:03:10
@Emanuil - 引用侏羅紀公園的Jeff Goldblum的話說,「人生找到一條路。」如果您有一天需要更改用戶名,現在您可能會後悔此刻...... – 2010-01-27 09:23:19
「'信息'不能用作密鑰;'數據'可能」; '數據'不需要改變,就像程序一定要理解一樣。如果我打電話給SO並要求更改我的用戶_id_會怎麼樣?我不能這樣做,但我可以更改我的用戶_名稱。 – 2010-01-27 09:30:39