用于处理用户门户和客户网站的模式的单用户表

时间:2017-03-21 09:43:17

标签: database database-design architecture

我们正在为rest app服务器运行单个数据库。我们有三种类型的用户

  1. for customer
  2. 代表管理员,
  3. for partners
  4. 目前他们有不同的表,用户名和密码也分别独立现在我们需要在用户扩展时重构这个模式。 那么User表的Role表是否正常? (此处Role可以是管理员,合作伙伴或客户,经理)。

    OR

    如果我们使用用户和角色表,我们是否应该保持原样:

    1. 如果管理员获取用户名,则由于唯一约束,该用户名或用户的用户名不能再相同。
    2. 我认为用户角色不能像"客户"因为客户不是角色。角色可以是管理员,经理等
    3. 我认为这不是保持单表的正确方法。你有什么建议吗?

3 个答案:

答案 0 :(得分:3)

我认为你应该为你的用户管理创建三个表,考虑到一个用户可以拥有多个角色的事实(例如: - admin也可以是经理或者客户也可以是合作伙伴)。因此,User表和Role表具有Many-To-Many关系。要创建此关系,您必须创建具有userId和roleId作为复合主键的第3个表。

另外,我注意到你要在数据库中保存用户的密码。出于安全原因,请勿以纯文本格式存储密码。 Instaed使用单向散列算法存储密码的散列。 你可以从这里阅读更多相关信息 - > Best way to store password in database

答案 1 :(得分:1)

是的,由于以下原因,最好保留单独的表格:
1.如您所述,客户不是一个角色 2.由于管理员的数量有限,因此从拥有客户的大型数据集中获取认证/授权记录是没有意义的。它会妨碍表现。

答案 2 :(得分:0)

用户
ID
用户id
角色(外键)

<强>角色
ID

以上结构是最佳实践。 如果你真的需要管理员,合作伙伴或客户的额外字段 您可以为每个实体创建单独的实体,您可以将用户称为外键,如下所示


客户
ID

用户(外键)