我们正在为rest app服务器运行单个数据库。我们有三种类型的用户
目前他们有不同的表,用户名和密码也分别独立现在我们需要在用户扩展时重构这个模式。
那么User
表的Role
表是否正常? (此处Role
可以是管理员,合作伙伴或客户,经理)。
OR
如果我们使用用户和角色表,我们是否应该保持原样:
我认为这不是保持单表的正确方法。你有什么建议吗?
答案 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
名
用户(外键)
等