mysql - 为用户身份验证创建表 - 改进空间?

标签 mysql

目前我正在开发一个网络应用程序。为此,我需要创建一个用于用户身份验证的数据库。

我有类似以下的想法:

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. 不要对 ID 使用 SMALLINT。严重地。为什么会有人这样做!?使用更大的整数类型。
  2. user_roles 上的主键不起作用。将 (user_id, role_id) 设为主键,并在您要查询的字段上放置单独的(非唯一的)索引。
  3. 您可以添加将 user_roles 链接到其他表的外键。如果您使用 ON DELETE CASCADE,它甚至会在您删除用户或角色时删除过时的链接。

关于mysql - 为用户身份验证创建表 - 改进空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5881785/

相关文章:

php - 在doctrine2映射定义中使用计算列

php - 这么多更新查询

mysql 将文本存储为问号(flask 服务器)

mysql - 加入两个mysql表并按日期显示数据

php - 更改复杂的 INNER JOIN 查询并使用 PHP 显示它

php - 如何使用 PHP 检索/下载存储在 MySQL 数据库中的 BLOB 中的文件

mysql - 将 XAMPP 文件夹移动到新计算机,现在在尝试启动 MySQL 时得到 "(XAMPPErrorDomain error 1.)"

php - 截断了不正确的 DOUBLE 值

java - 在 MySQL 上使用 Hibernate 的 Glassfish 严重警告

php - 如何根据提交的按钮执行 php 部分