首页 理论教育数据库技术与应用教程:层次模型中多对多联系的表示

数据库技术与应用教程:层次模型中多对多联系的表示

【摘要】:前面提到,层次模型只能表示一对多的联系,不能直接表示多对多的联系。当有多对多联系需要在层次模型中表示时,应采用分解的方法,即将多对多的联系分解成一对多的联系,使用多个一对多联系来表示一个多对多联系。图3-14是一个含有多对多联系的E-R图。冗余节点法的优点是结构清晰,允许用虚拟节点法表示多对多联系许多节点改变存储位置;缺点是占用存储空间大,有潜在的不一致性。

前面提到,层次模型只能表示一对多(包括一对一)的联系,不能直接表示多对多的联系。当有多对多联系需要在层次模型中表示时,应采用分解的方法,即将多对多的联系分解成一对多的联系,使用多个一对多联系来表示一个多对多联系。分解方法主要有两种:冗余节点法和虚拟节点法。

图3-14是一个含有多对多联系的E-R图。图中有学生和课程两个实体集,它们间的联系为多对多类型,即一个学生可以选修多门课程,一门课程可由多个学生选修。下面用这个例子说明多对多联系的分解方法。

图3—14 一个多对多联系的例子

1.冗余节点分解法

冗余节点分解法通过增加冗余节点的方法将多对多的联系转换成一对多的联系。对于如图3-14所示的多对多联系的实例,要设计两组学生和课程记录:一组表示一个学生选择多门课程的学生与课程之间的l∶n联系;另一组表示一门课程有多个学生选择的课程与学生之间的l∶n联系,其基本层次联系如图3-15所示。显然,使用冗余节点分解法会使数据库中有冗余的学生和课程记录。

(www.chuimin.cn)

图3—15 用冗余节点法表示多对多联系

2.虚拟节点分解法

所谓虚拟节点,就是一个指引元,该指引元指向所代替的节点。虚拟节点分解法通过使用虚拟节点,将实体集间的多对多联系分解为多个层次模型,然后用多个层次模型表示一对多联系。将图3-15中的冗余节点转换为虚拟节点,可得到具有虚拟节点的基本层次联系,如图3-16所示。

图3—16 用虚拟结点法表示多对多联系

上面两种方法各有所长。冗余节点法的优点是结构清晰,允许用虚拟节点法表示多对多联系许多节点改变存储位置;缺点是占用存储空间大,有潜在的不一致性。虚拟节点法的优点是占用存储空间小,能够避免潜在的不一致性问题;缺点是节点改变存储位置时可能引起虚拟节点指针的改变。