在mysql中创建用于用户身份验证的权限表

在mysql中创建用于用户身份验证的权限表,mysql,Mysql,我浏览了不同的教程,找到了创建用户身份验证权限表的最佳实践,并多次找到了这样的解决方案: CREATE TABLE user_roles ( user_role_id int(11) NOT NULL AUTO_INCREMENT, username varchar(45) NOT NULL, role varchar(45) NOT NULL, PRIMARY KEY (user_role_id), UNIQUE KEY uni_username_role (role,username), K

我浏览了不同的教程,找到了创建用户身份验证权限表的最佳实践,并多次找到了这样的解决方案:

CREATE TABLE user_roles (
user_role_id int(11) NOT NULL AUTO_INCREMENT,
username varchar(45) NOT NULL,
role varchar(45) NOT NULL,
PRIMARY KEY (user_role_id),
UNIQUE KEY uni_username_role (role,username),
KEY fk_username_idx (username),
CONSTRAINT fk_username FOREIGN KEY (username) REFERENCES users (username)); 
你能帮我理解一下键fk\u username\u idx(username)代表什么吗?它有什么用处


在此表中,我们使用用户名作为外键。这意味着它将是users表中的主键。将主键设为非整数值不是一种糟糕的做法吗?

您似乎已经完全理解了
键fk\u username\u idx(username)
的含义。是的,您应该避免使用长字符串字段作为主键,但在某些情况下这是不可避免的。因此,fk_username_idx是一个处理外键用户名的索引?为了使FKs工作,必须对所有引用和引用的字段进行索引。如果引用字段不存在,FK会在引用字段上创建一个隐式索引,但您可以创建自己的索引。创建显式索引的原因可能是什么?我猜不出sy else在这种特殊情况下为什么选择创建显式索引。但这并不重要。