2011-01-13 46 views
2

我们正在设计一个名为Person的简单表的数据库。每个人都可以有几个与他有关的角色,比如客户,员工,经理等等。每个角色都会附带一个属性列表,因此我们也为每个角色提供一张表。将人际关系设计为角色

现在我们需要将一个人连接到他的角色集。这样做的最好方法是什么?

到目前为止,我们已经提出了两种设计方案,我们不确定哪一种方案在扩展方面具有最佳性能,并且可能会引入更多角色并保持数据库内的数据完整性。

我们的第一个设计应该有一张表,用于映射具有特定角色的人员和该角色表中的ID。在这个表中的条目看起来像

personid: 5 
role: 2 (manager) 
roleid: 6 (the id to look for in the manager table) 

虽然这种解决方案将与以后它通过使用外键不自然地实施数据完整性的缺点的过程中添加的进一步职责规模。

其他设计将有一个映射表每个角色。所以就用一个条目类似

personId: 5 
staffMemberId: 12 

该解决方案StaffMemberMapping表强制通过FKS数据的完整性,但也要求我们在几个表,分别查找我们的人,看看哪个角色,他是与时间去看看。

这些解决方案哪一个有利?或者更好,如果还有第三种更好的解决方案,请提供建议。

回答

1

第二种解决方案似乎是自然选择,因为角色是对象之间的关系,并且您可以使用单独的表为关系数据库中的单独关系建模。我建议只有在有理由这样做时,才会偏离标准化的数据库设计,所以我会选择(2),并且只有存在性能问题时,才会对数据库进行非规范化并在(2)之外添加(1)以便查询。