2011-05-04 59 views
1

目前我正在開發一個Web應用程序。爲此,我需要爲用戶身份驗證創建一個數據庫。爲用戶認證創建表 - 有待改進的空間?

我有一些像記住以下幾點:

create table users 
(
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, 
username VARCHAR(100) NOT NULL, 
password VARCHAR(60) NOT NULL, 
PRIMARY_KEY(id), 
UNIQUE(username) 
); 

create table roles 
(
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, 
role VARCHAR(100) NOT NULL, 
PRIMARY_KEY(id), 
UNIQUE(role) 
); 

create table user_roles 
(
user_id SMALLINT UNSIGNED NOT NULL, 
role_id SMALLINT UNSIGNED NOT NULL, 
PRIMARY_KEY(user_id) 
UNIQUE (user_id, role_id), 
); 

密碼是固定的大小,但我用varchar因爲我讀的地方,在一個表中,你有兩個charvarchar列,則char列轉換爲varchar

另外,使用FOREIGN KEY CONSTRAINTS會有好處嗎?

+0

拼寫錯誤'mysql'標籤。兩次。 – BoltClock 2011-05-06 01:24:37

回答

3
  1. 請勿使用SMALLINT s作爲ID。認真。爲什麼有人會那樣做?使用較大的整數類型。
  2. user_roles上的主鍵不起作用。將(user_id, role_id)作爲主鍵,並在要查詢的字段上放置單獨的(非唯一)索引。
  3. 您可以添加將user_roles鏈接到其他表的外鍵。如果您使用ON DELETE CASCADE,那麼即使您刪除了用戶或角色,它甚至會刪除陳舊的鏈接。