我見過很多討論是否最好使用用戶名或用戶名作爲表的主鍵。如果需要,userid將允許以後更改用戶名的靈活性。也是實現安全性的一種方式。但是,用戶名也是唯一標識符。用戶名或用戶ID
如果讓我選擇的userid我的主鍵,什麼是強制用戶名採取了獨特價值的最佳方式是什麼?
如果讓我選擇的用戶名,有什麼問題我應該知道的?
我見過很多討論是否最好使用用戶名或用戶名作爲表的主鍵。如果需要,userid將允許以後更改用戶名的靈活性。也是實現安全性的一種方式。但是,用戶名也是唯一標識符。用戶名或用戶ID
如果讓我選擇的userid我的主鍵,什麼是強制用戶名採取了獨特價值的最佳方式是什麼?
如果讓我選擇的用戶名,有什麼問題我應該知道的?
我將宣佈UserId
作爲PRIMARY KEY
一樣會有其它表通過UserId
參照該用戶記錄,從而將強制執行任何FOREIGN KEY
約束是有用的。
如果用戶名需要唯一,那麼我將聲明它爲NON NULL
列並定義UNIQUE KEY
約束。 NON NULL
屬性將防止列中的UNIQUE KEY
約束允許的單個空值。因此,在UserName上設置的值與PRIMARY KEY
的值相似。
在語義上,我的耳朵至少,的userid聽起來像人工創造的值,可能是人工的主鍵,而用戶名聽起來自然的,用戶友好(的分量)的自然主鍵。使用相反意義上的術語可能會偶爾混淆程序員和用戶,並有可能在後面創建微妙的錯誤。
這是從我自己的角度來看。
我寧願選擇數據類型爲int的UserID
(或可能是串)是表的主鍵,因爲在任何時候,這不能改變。由於它是不可更改的,所以引用它的某些外鍵沒有問題。
爲什麼我沒有選擇Username
是因爲在某些時候,雖然這是獨一無二的,可有時會改變的原因。如果已經有外鍵引用它,那麼該用戶名根本無法更改,直到這些鍵或記錄首先被刪除或刪除。
什麼是執行用戶名採取了獨特價值的最佳方式是什麼?
創建唯一索引。
如果讓我選擇的用戶名,有什麼問題我應該知道的?
您是否允許用戶隨時更改他們的用戶名(只要它保持唯一)?如果是,則使用您生成的用戶標識;否則使用他們選擇的用戶名。
對於第一個問題,UNIQUE
約束在大多數現代RDBMS中都可用。您也可以在應用程序級別實現它。
對於第二個問題,我沒有看到任何明顯的問題。用戶名通常爲最終用戶所知。但是,如果您擁有大量用戶並且用戶名字段的最大長度很大,那麼索引的效率可能不如int類型的用戶ID字段。