将管理员用户与前端用户放在同一个表中是不是很好的数据库设计?

时间:2010-11-12 23:18:24

标签: sql sql-server database database-design data-modeling

我的用户可以登录前端页面,管理员可以登录管理页面。

用户和管理员都应该是具有不同角色的“用户”,还是应该在不同的表中拆分?

9 个答案:

答案 0 :(得分:38)

角色应与用户帐户分开跟踪,因为有人可能会随着时间推移(或降级)。在这种情况下,在两个不同的表中有两个不同的用户帐户是否有意义?我想不是。

这是我使用的基本结构 -

用户

  • user_id(主键)
  • USER_NAME

角色

  • role_id(主键)
  • ROLE_NAME

USER_ROLES

  • user_id(主键,USERS.user_id的外键)
  • role_id(主键,ROLES.role_id的外键)

答案 1 :(得分:9)

如果管理员和用户共享字段,它们似乎应该放在同一个表中,以避免重复结构。他们都有名字和姓氏。两者都是现实世界中的人类。这可能就是应该的样子。

但另一方面,国家和城市都有一个名字。两者都是地点。他们应该总是在同一张桌子上吗?有时他们在递归模型中。有时它们是分开的。

我的想法......管理员被认为是您系统中用户的“类型”?或者它是真正不同的东西,“用户”类型没有适用于它?这取决于管理员在您的系统中的真正含义。共享结构是沿着城市/州的线路吗?或者是“你是TYPE用户”的共享结构?

但如果有疑问,请将管理员放在用户表中,因为我怀疑它们是真正独立的。您可能希望共享两者的身份验证系统。您可能希望共享两者的帐户创建。除非管理员是一些特殊的东西,只有开发人员在后端使用。

答案 2 :(得分:8)

是的,所有用户都属于users表。你还需要一个Roles表并在两者之间有一个FK。

答案 3 :(得分:5)

用户意外成为管理用户的风险不应大于用户意外成为不同用户的风险,这绝对不会发生。

请注意,如果您在单独的表中有常规用户和管理用户,那么常规用户表中的用户ID将与管理用户表中的用户ID匹配。您必须确保一种类型的用户ID 永远不会被意外地用作另一种类型。发现可能导致用户ID变为不同用户ID的内容更难发现这样的问题。

答案 4 :(得分:4)

我个人将“用户”保留在一个表格中。您决定如何表示角色(例如,作为User表本身的静态位,或通过高级RBAC权限)取决于您的系统的复杂程度。但用户是用户。

答案 5 :(得分:2)

创建单独的Roles表和单独的User_Roles表。在第一个定义角色时,在第二个中将用户连接到各自的角色(它们可能有多个角色?)

答案 6 :(得分:1)

在保留用户的位置应该没有问题,只有问题应该是您通过其访问该信息的页面\方法。

将两者保存在同一个表上实际上会更好,因为它们具有相同的数据类型。

答案 7 :(得分:1)

从数据的角度来看,管理员是具有不同角色的用户是有道理的。每个用户权限可以有一个表,将用户与其角色相关联。用户可以拥有多个这样的角色,但在一天结束时,管理员就是用户。

答案 8 :(得分:0)

我相信你的问题没有绝对的真相,这取决于你的申请。

用户类型 可以在不同的表中的两个原因是:

  • 这些类型的数据结构不同(详细信息/地址等)。
  • 好好睡一觉。如果手动编辑FK值(指向用户),则可以避免将任何内容指向前端用户的风险。