目前我正在开发一个网络应用程序。为此,我需要创建一个用于用户身份验证的数据库。
我有类似以下的想法:
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 是否有益?
最佳答案
- 不要对 ID 使用
SMALLINT
。严重地。为什么会有人这样做!?使用更大的整数类型。 user_roles
上的主键不起作用。将(user_id, role_id)
设为主键,并在您要查询的字段上放置单独的(非唯一的)索引。- 您可以添加将
user_roles
链接到其他表的外键。如果您使用ON DELETE CASCADE
,它甚至会在您删除用户或角色时删除过时的链接。
关于mysql - 为用户身份验证创建表 - 改进空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5881785/