我的数据库中有一个users
表,有三种用户角色 - 经理(管理员),专家和学生。
我已尝试将其角色存储在role
表中的users
列,但我的问题是存储它的最佳方法是什么?
例如,我应该使用数字 - 1表示管理员,2表示专家,3表示学生。或者只有一个字符 - 管理员为“A”,专家为“E”,学生为“S”?或管理员等完整的字符串'admin',或者是什么?
修改
伙计们,我想要最有效率的方式。你们中的一些人告诉我要有另一张桌子,但这种关系并不多,这是一对一的,因为用户只能有一个角色。
答案 0 :(得分:5)
您可能希望拥有一个单独的联结表,例如user_roles
,其中包含以下列:id
,user_id
和role_id
。这样,每个用户将来可以拥有多个角色,即使现在他们只有1个。
并且role_id
将指向新roles
表中的角色,该表可以包含与角色关联的所有数据。
或者,如果您真的不想要联结表,那么只需将role_id
直接放入users
表。
查找数据库"规范化"。基本上,如果您有一组特定的数据将在列中重复,您可能希望将其放在自己的表中。
答案 1 :(得分:1)
您可以创建一个显示2列的单独表格:role_nbr,角色值为: 1,管理员; 2,专家; 3,学生
然后在您的users表中包含role_nbr并使用数字,将其链接到角色表以查找角色名称。这样,如果您增加了角色,就可以轻松添加到单独的表中。一个很好的研究将是关于规范化 - 这将帮助你消除存储重复信息的地方,你需要存储大量信息(比如角色名称 - 因为存储一个数字或字母 - 你怎么记得它代表什么?)
答案 2 :(得分:0)
使用enum
类型。这是一个例子
CREATE TABLE users (
-- the other columns
role ENUM('admin, 'expert', 'student')
);
ENUM是一个字符串对象,其值从允许值列表中选择,这些值在表创建时在列规范中显式枚举。
这意味着enum
类型已定义了值(并且每行只能包含一个值 - 您不能拥有admin
的用户同一时间student
)。在您的情况下,它们是admin
,expert
和student
。