好的,假设你有一个具有以下属性的用户定义:
用户名, 密码, ...等
您将角色映射到用户,例如admin,no_privileges,god_mode;)等
为什么我遇到的每个例子都将这些作为单独的表格?然后将用户映射到角色?
我的意思是,它的实际意义是什么?显然必须有一些我缺少的东西,但是你不能只将“角色”作为用户属性(或多个角色的列表角色?),从而保持一切更清洁......
此外,如果角色不太可能经常更改 - 是否最好只设置一个具有角色列表的类设置,以减少对数据库的调用?
答案 0 :(得分:2)
如果所有用户都有一个角色,那么您真的不需要另一张桌子。拥有映射表可以设置多对多关系,允许单个用户拥有多个角色,并且还可以为多个用户分配相同的角色。
例如,如果它全部在User表中,则不可能具有以下内容:
用户:bob,角色:用户,超级用户 user:joe,roles:user,admin
这是一个非常常见的设置。在这种情况下,每个人通常都会拥有“用户”#39;角色,但通过其他角色获得额外的权限。在传统的RDBMS中,您必须具有多对多的关系才能以相当规范的方式对其进行建模,这需要映射表。
答案 1 :(得分:1)
Google“数据库规范化。”
从技术角度来看,将角色保留在自己的表中可以减少冗余,防止命名不一致(因为您必须通过其主键引用此表),允许用户和角色之间的多对多关系等。< / p>
从功能角度来看,这允许用户拥有多个角色。如果您需要管理许多权限,则为每个权限组合定义和维护角色并将该单个角色分配给适当的用户是没有意义的。定义逻辑角色(根据您的要求有意义的特权集合)然后将这些较小的角色分配给用户会更容易和更易于维护。这样,如果您需要为给定用户授予或撤消特权的子集,您只需通过此表从角色添加/删除它们,而不是重新定义其整个角色(并随后影响其他人也是其中的一部分)角色)。
答案 2 :(得分:0)
考虑到系统可能没有角色的可能性,因此不需要该表。如果你需要角色而不是你的角色。