目前我正在开发一个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
,因为我已经在某个表格中读到了char
和varchar
列的char
列转换为varchar
。
另外,使用FOREIGN KEY CONSTRAINTS是否有益?
答案 0 :(得分:3)
SMALLINT
用于ID。认真。为什么有人会那样做?!使用更大的整数类型。user_roles
上的主键无效。使(user_id, role_id)
成为主键,并在要查询的字段上放置单独的(非唯一)索引。user_roles
链接到其他表的外键。如果您使用ON DELETE CASCADE
,如果您删除了用户或角色,它甚至会删除过时的链接。