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