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