2013-04-20 74 views
1

我見過很多討論是否最好使用用戶名或用戶名作爲表的主鍵。如果需要,userid將允許以後更改用戶名的靈活性。也是實現安全性的一種方式。但是,用戶名也是唯一標識符。用戶名或用戶ID

如果讓我選擇的userid我的主鍵,什麼是強制用戶名採取了獨特價值的最佳方式是什麼?

如果讓我選擇的用戶名,有什麼問題我應該知道的?

回答

2

我將宣佈UserId作爲PRIMARY KEY一樣會有其它表通過UserId參照該用戶記錄,從而將強制執行任何FOREIGN KEY約束是有用的。

如果用戶名需要唯一,那麼我將聲明它爲NON NULL列並定義UNIQUE KEY約束。 NON NULL屬性將防止列中的UNIQUE KEY約束允許的單個空值。因此,在UserName上設置的值與PRIMARY KEY的值相似。

0

在語義上,我的耳朵至少,的userid聽起來像人工創造的值,可能是人工的主鍵,而用戶名聽起來自然的,用戶友好(的分量)的自然主鍵。使用相反意義上的術語可能會偶爾混淆程序員和用戶,並有可能在後面創建微妙的錯誤。

2

這是從我自己的角度來看。

我寧願選擇數據類型爲int的UserID或可能是串)是表的主鍵,因爲在任何時候,這不能改變。由於它是不可更改的,所以引用它的某些外鍵沒有問題。

爲什麼我沒有選擇Username是因爲在某些時候,雖然這是獨一無二的,可有時會改變的原因。如果已經有外鍵引用它,那麼該用戶名根本無法更改,直到這些鍵或記錄首先被刪除或刪除。

0

什麼是執行用戶名採取了獨特價值的最佳方式是什麼?

創建唯一索引。

如果讓我選擇的用戶名,有什麼問題我應該知道的?

您是否允許用戶隨時更改他們的用戶名(只要它保持唯一)?如果是,則使用您生成的用戶標識;否則使用他們選擇的用戶名。

0

對於第一個問題,UNIQUE約束在大多數現代RDBMS中都可用。您也可以在應用程序級別實現它。

對於第二個問題,我沒有看到任何明顯的問題。用戶名通常爲最終用戶所知。但是,如果您擁有大量用戶並且用戶名字段的最大長度很大,那麼索引的效率可能不如int類型的用戶ID字段。