枚举与存储角色的单独表?

Dee*_*dhy 5 mysql enums ruby-on-rails ruby-on-rails-4

我必须在我的应用程序中实现角色系统以进行授权。我们的系统中有大约 5 种角色。

为了维持这些角色,我们有两个选择,

替代方案#1

1.在rails角色模型中创建一个枚举,

enum role: {super_admin: 1, translator: 2, approver: 3, sales_admin: 4, marketing_admin: 5, guest: 6}

2.在角色表中,现在我们将有ID user_id role_id

替代方案#2

1.创建2个模型Role and Role_User

Role 表将仅包含ID | role_nameRole_User 将包含ID | user_id | role_id

应该优先选择哪个?

Div*_*rma 7

我建议采用第二种方法,就好像将来有可能担任额外的角色一样,您将没有负担创建该额外的角色。使用第一种方法,您必须编辑枚举以获取将来可能想要添加的其他角色


vij*_*joc -1

单独表的另一个好处是用户可以拥有多个角色(如果您的系统需要的话)。此外,在数据库中存储不同的角色应该可以更好地强制执行数据库级数据完整性,即您不能向用户添加不存在的角色。

如果您最终确实使用单独的角色表和连接表,请务必向连接表添加正确的索引。

除此之外,它实际上取决于上下文和用例。如果系统足够简单,那么采用枚举方式没有什么问题。