2.5 概念模型向逻辑模型的转换
E-R图向关系模型的转换需要解决的问题是如何将实体型和实体间的联系转换为关系模式,如何确定这些关系模式的属性和码。
关系模型的逻辑结构是一组关系模式的组合。E-R图是由实体型、实体的属性和实体型之间的联系3个要素组成的。所以将E-R图转换为关系模型就是将实体、实体的属性和实体之间的联系转换为关系模式。这种转换一般遵循如下原则。
1.实体的转换
实体转换为关系模型很简单,一个实体对应一个关系模型,实体的名称即是关系模型的名称,实体的属性就是关系模型的属性,实体的码就是关系模型的码。
转换时需要注意以下内容。
1)属性域的问题。如果所选用的DBMS不支持E-R图中某些属性域,则应做相应修改,否则由应用程序处理转换。
2)非原子属性的问题。E-R图中允许非原子属性,这不符合关系模型的第一范式条件,必须做相应处理。
2.联系的转换
在E-R图中存在三种联系:1:1、1:n和m:n,它们在向关系模型转换时,采取的策略是不一样的。
(1)1:1联系转换
方法一:将1:1联系转换为一个独立的关系模式,与该联系相连的各实体的码以及联系本身的属性均转换为关系模式的属性,每个实体的码均是该关系模式的码。
以图2-9所示的E-R图为例,它描述的是实体学生和校园卡之间的联系,这里假设:一个学生只能办理一张校园卡,一张校园卡只能属于一个学生,因此,联系的类型是1:1。转换情况为:
实体转换:学生(学号,姓名),校园卡(卡号,余额);
联系办卡的转换:办卡(学号,卡号,办卡日期)。
方法二:与任意一端对应的关系模式合并。合并时,需要在该关系模式的属性中加入另一个关系模式的码和联系本身的属性。图2-9所示E-R图的转换情况为:
图2-9 校园卡和学生之间的E-R图
学生(学号,卡号,姓名,办卡日期)或
校园卡(卡号,学号,余额,办卡日期)
(2)1:n联系转换
方法一:转换为一个独立的关系模式,与该联系相连的各实体的码以及联系本身的属性均转换为关系模式的属性,而关系模式的码为n端实体的码。
以图2-10的E-R图为例,它描述的是实体学生和班级之间的联系,这里假设:一个学生只能在一个班级学习,一个班级包含多个学生。因此,联系的类型是1:n。转换情况为:
实体转换:学生(学号,性别,姓名),班级(班号,班名);
联系组成的转换:组成(学号,班号)。
方法二:与n端对应的关系模式合并,在该关系模式中加入1端实体的码和联系本身的属性。图2-10所示E-R图的转换情况为:
实体转换:学生(学号,性别,姓名),班级(班号,班名);
联系与学生一端合并,则关系模型学生变为:学生(学号,班号,性别,姓名)。
(3)m:n联系转换
与1:1和1:n联系不同,m:n联系不能由一个实体的码唯一标识,必须由所关联实体的码共同标识。这时,需要将联系单独转换为一个独立的关系模式,与该联系相连的各实体的码以及联系本身的属性均转换为关系模式的属性,每个实体的码组成关系模式的码或关系模式的码的一部分。
以图2-11的E-R图为例,它描述的是实体学生和课程之间的联系,这里假设:一个学生可以选修多门课程,一门课程可以由多个学生选修。因此,联系的类型是m:n。转换情况为:
实体转换:学生(学号,性别,姓名)和课程(课程号,课程名);
联系选修的转换:选修(学号,课程号,成绩)。
具有相同码的关系模式可以合并,从而减少系统中关系的个数。合并方法是将其中一个关系模式的全部属性加入到另一个关系模式中,然后去掉其中的同义属性(可能同名,也可能不同名),并适当调整属性的次序。
图2-10 班级和学生的E-R图
图2-11 课程和学生的E-R图