创建用于用户身份验证的表 - 改进空间?

时间:2011-05-04 10:11:34

标签: mysql

目前我正在开发一个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是否有益?

1 个答案:

答案 0 :(得分:3)

  1. 不要将SMALLINT用于ID。认真。为什么有人会那样做?!使用更大的整数类型。
  2. user_roles上的主键无效。使(user_id, role_id)成为主键,并在要查询的字段上放置单独的(非唯一)索引。
  3. 您可以添加将user_roles链接到其他表的外键。如果您使用ON DELETE CASCADE,如果您删除了用户或角色,它甚至会删除过时的链接。