枚举数据类型与MySQL中的数据表?

Mik*_*ore 7 mysql database database-design

我有一个MySQL表users,包含以下列:

  1. user_id(PK)
  2. 电子邮件
  3. 名称
  4. 密码

要管理角色系统,以下任何一个选项都会有缺点吗?

选项1:

创建了第一个表roles有三列:role_id(主键),namedescription,然后关联users.user_idroles.role_id在第三表作为外键叫users_roles

要么...

选项2:

roles使用两列创建第二个表:( user_id外键来自users.user_id)和role(ENUM)?ENUM数据类型列允许将允许的角色的简短列表作为值插入.

我以前从未在MySQL中使用ENUM数据类型,所以我只是好奇,因为选项2意味着少一个表.我希望这是有道理的,这是我第一次尝试在论坛中描述MySQL表.

Dan*_*llo 9

通常,ENUM在这些情况下不应使用类型.如果您打算在将来添加或删除角色的灵活性,则尤其如此.更改a值的唯一方法ENUM是使用a ALTER TABLE,而在自己的表中定义角色只需要在roles表中使用新行.

此外,使用该roles表允许您添加其他列以更好地定义角色,例如description您在选项1中建议的字段.如果您使用ENUM选项2中的类型,则无法执行此操作.

我个人不会ENUM在这些情况下选择.也许我可以看到它们被用于具有绝对有限的值集的列,例如{Spades, Hearts, Diamonds, Clubs}用于定义卡的套装,但是在诸如所讨论的那种情况下不能用于前面提到的缺点.