我有3种不同类型的用户:
- 客户端 -雇员 -admin
现在我只想要一个登录页面来识别所有这些页面。
我的例子: 带字段的登录表:
用户名密码id clientid adminid employeeid role
带有字段的客户表:
姓名年龄地址ID。
现在我想添加一些用户名为admin的客户端。 我无法添加他,因为存在这样的用户名(带有角色管理员)。客户表仅用于额外信息。最好的解决方案应该是1个表格,包含所有信息但是我不需要的字段。示例:当我打印客户信息时,我不需要现场薪水(应该可以为空?),并且说我只有50多个关于员工信息的字段。我认为我目前的数据库设计很糟糕。我该怎么办?
答案 0 :(得分:0)
有两种方法可以考虑。
一个是在一个人和她可能扮演的角色之间做出改变。这意味着人与角色之间的1:1,n关系。描述人的所有属性,如姓名,用户ID,散列密码,转到此人,角色等特定于角色的属性转到角色。如果真的发生一个人担任多个角色,这是非常通用的。我不确定客户和员工,但管理员和员工的声音好像可以由同一个人拍摄。
如果情况并非如此,即如果每个人都是客户,员工或管理员,但从不超过其中一个,这将是过度的。然后你在逻辑上有一个继承的情况,其中c,e和a是人的特殊情况。在关系数据库中实现这一点的技术不止一种,它不支持继承。最简单的是每个类的表层次结构,这实际上意味着将普通人和特化的所有属性放在一个表中,并在必要时将它们设为空。如果有许多特定于每个专业化的属性,则单独的表也是一种选择。
顺便说一句,所有这些与您是否只需要一个登录页面无关。即使您有多个表,您仍然可以将视图定义为它们的并集,包含用户名和散列密码以及可能的一些更常见的数据。
顺便说一句,我在第一段中关于作为人员实体一部分的用户凭证的评论是一种简化。作为用户也可能是甚至不一定与某人绑定的角色。想象一下需要访问数据库的一些自动作业。它也是可以被分配了某些特权的用户,但它不是人。我不知道你的要求是否明智地改变了这一点。