我们正在设计一个具有名为Person的简单表的数据库。每个人都可以有几个与他相关的角色,如客户,员工,经理等。每个角色都会附带一个属性列表,因此我们也为每个角色提供了一个表格。
现在我们需要将一个人连接到他的一组角色。这样做的最佳方式是什么?
到目前为止,我们已经提出了两种设计,我们不确定哪种设计在扩展方面是最佳的,可以引入更多角色以及在数据库中保持数据集成。
我们的第一个设计将有一个表,用于映射具有特定角色的人,以及该角色表中的id。此表中的条目看起来像
personid: 5
role: 2 (manager)
roleid: 6 (the id to look for in the manager table)
虽然此解决方案会随着后续过程中添加的其他角色而扩展,但它的缺点是不能通过使用外键自然地强制执行数据完整性。
另一个设计将有每个角色的映射表。所以会有一个StaffMemberMapping表,其中的条目类似于
personId: 5
staffMemberId: 12
此解决方案通过FK强制执行数据完整性,但每次我们查找某个人以查看与其相关的角色时,还要求我们查看几个表。
这些解决方案中哪一个有利?或者甚至更好,如果还有第三个更棒的解决方案,请提出建议。
答案 0 :(得分:1)
第二个解决方案似乎是自然的选择,因为,角色是对象对之间的关系,并且您使用单独的表对关系数据库中的单独关系进行建模。我建议只有在有理由这样做才能从规范化数据库设计中消失,所以我会选择(2),并且只有在存在性能问题时,才会对数据库进行非规范化并添加(1)以及(2)为了更容易查询。