在数据库中存储一对多列的最佳方式

问题描述:

我在我的数据库中有一个users表,它有三种用户角色 - 管理员(admin),专家和学生。在数据库中存储一对多列的最佳方式

我曾尝试将其角色存储在users表中的列role,但我的问题是存储它的最佳方式是什么?

例如,我应该使用数字 - 1为管理员,2为专家和3为学生。或者只有一个角色 - 管理员为'A',专家为'E',学生为'S'或为管理员等完整的字符串'管理员',或者什么?

编辑

伙计们,我想最有效的方式。你们中的一些人告诉我要另一张桌子,但这种关系并不是很多,这是一对多的,因为用户只能有一个角色。

+1

这更多取决于你的使用情况和规范要求,但如果是我,我会做归一化的东西,使其更具活力 – mituw16 2014-11-03 19:26:44

您可能希望有一个单独的联结表,例如user_roles,它们将具有列:id,user_idrole_id。这样,每个用户将来可以拥有多个角色,即使现在他们只有1个。

并且role_id将指向新的roles表中的某个角色,该表中可能包含与角色关联的所有数据。

或者如果你真的不想要接口表,那么只需将role_id直接放入你的users表中即可。

查找数据库“正常化”。基本上,如果您有一组将在列中重复的特定数据,则可能需要将其放入其自己的表中。

+0

任何用户只能有一个角色 – Arman 2014-11-03 19:54:47

+1

,今天可能是真实的,但除非你能保证它会永远保持真实,请按照这个答案的建议。 – 2014-11-03 20:37:44

+0

@Andrew这不是我的答案,我想要存储角色列的方式,那么如何将角色存储在新表中? – Arman 2014-11-03 20:44:36

您可以创建一个单独的表,显示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,expertstudent

DOCS