Mysql 为用户身份验证创建表-还有改进的余地吗?

Mysql 为用户身份验证创建表-还有改进的余地吗?,mysql,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 U

目前我正在开发一个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

此外,使用外键约束是否有益

  • 不要对ID使用
    SMALLINT
    s。认真地为什么会有人这么做!?使用较大的整数类型
  • user\u roles
    上的主键不起作用。将
    (用户id、角色id)
    作为主键,并在要查询的字段上放置单独的(非唯一的)索引
  • 您可以添加将
    用户角色
    链接到其他表的外键。如果您在DELETE CASCADE上使用
    ,它甚至会在您删除用户或角色时删除过时的链接

  • 您拼错了
    mysql
    标记。两次。