我们正在设计一个名为Person的简单表的数据库。每个人都可以有几个与他有关的角色,比如客户,员工,经理等等。每个角色都会附带一个属性列表,因此我们也为每个角色提供一张表。将人际关系设计为角色
现在我们需要将一个人连接到他的角色集。这样做的最好方法是什么?
到目前为止,我们已经提出了两种设计方案,我们不确定哪一种方案在扩展方面具有最佳性能,并且可能会引入更多角色并保持数据库内的数据完整性。
我们的第一个设计应该有一张表,用于映射具有特定角色的人员和该角色表中的ID。在这个表中的条目看起来像
personid: 5
role: 2 (manager)
roleid: 6 (the id to look for in the manager table)
虽然这种解决方案将与以后它通过使用外键不自然地实施数据完整性的缺点的过程中添加的进一步职责规模。
其他设计将有一个映射表每个角色。所以就用一个条目类似
personId: 5
staffMemberId: 12
该解决方案StaffMemberMapping表强制通过FKS数据的完整性,但也要求我们在几个表,分别查找我们的人,看看哪个角色,他是与时间去看看。
这些解决方案哪一个有利?或者更好,如果还有第三种更好的解决方案,请提供建议。