数据库原理及应用(Access版)第3版
上QQ阅读APP看书,第一时间看更新

2.4 E-R模型向关系模型的转换

E-R模型向关系模型转换要解决的问题是如何将实体以及实体之间的联系转换为关系模式,如何确定这些关系模式的属性和主关键字(这里所说的实体更确切地说是实体集)。

注意:这里包含两个方面的内容,一是实体如何转换,二是实体之间的联系如何处理。

2.4.1 实体转换为关系模式

E-R模型的表现形式是E-R图,由实体、实体的属性和实体之间的联系3个要素组成。从E-R图转换为关系模式的方法是:为每个实体定义一个关系,实体的名字就是关系的名字;实体的属性就是关系的属性;实体的键是关系的主关键字。用规范化准则检查每个关系,上述设计可能需要改变,也可能不用改变。依据关系规范化准则,在定义实体时就应遵循每个实体只有一个主题的原则。实体之间的联系转换为关系之间的联系,关系之间的联系是通过外部关键字来体现的。

2.4.2 实体之间联系的转换

前面讨论过实体之间的联系通常有3种类型:一对一联系、一对多联系和多对多联系。下面从实体之间联系类型的角度来讨论3种常用的转换策略。

1.一对一联系的转换

两个实体之间的联系最简单的形式是一对一(1∶1)联系。1∶1联系的E-R模型转换为关系模型时,每个实体用一个关系表示,然后将其中一个关系的关键字置于另一个关系中,使之成为另一个关系的外部关键字。关系模式中带有下画线的属性是关系的主关键字。

例2-1】本例的需求分析和E-R模型见第1章【例1-2】。

根据转换规则,公司实体用一个关系表示;实体的名字就是关系的名字,因此关系名是“公司”;实体的属性就是关系的属性,实体的键是关系的关键字,由此得到关系模式:

公司(公司编号,公司名称,地址,电话)

同样可以得到关系模式:

总经理(经理编号,姓名,性别,出生日期,民族)

为了表示这两个关系之间具有一对一联系,可以把“公司”关系的关键字“公司编号”放入“总经理”关系,使“公司编号”成为“总经理”关系的外部关键字;也可以把“总经理”关系的关键字“经理编号”放入“公司”关系,由此得到下面两种形式的关系模式。

关系模式一:

公司(公司编号,公司名称,地址,电话)

总经理(经理编号,姓名,性别,出生日期,民族,公司编号

关系模式二:

公司(公司编号,公司名称,地址,电话,经理编号

总经理(经理编号,姓名,性别,出生日期,民族)

注意:其中斜体内容为外部关键字。

2.一对多联系的转换

一对多(1∶n)联系的E-R模型中,通常把“1”方(一方)实体称为“父”方,“n”方(多方)实体称为“子”方。1∶n联系的表示简单而且直观。一个实体用一个关系表示,然后把父实体关系中的关键字置于子实体关系中,使其成为子实体关系的外部关键字。

例2-2】本例的需求分析和E-R模型见第1章【例1-4】。

在这个E-R模型中,仓库实体是“一方”父实体,员工实体是“多方”子实体。每个实体用一个关系表示,然后把仓库关系的主关键字“仓库号”放入员工关系中,使之成为员工关系的外部关键字。于是得到下面的关系模式。

关系模式:

仓库(仓库号,仓库名,地点,面积)

员工(员工号,姓名,性别,出生日期,工资,仓库号

例2-3】考虑学生毕业设计中的指导教师和学生的情况。

(1)需求分析

学校使用数据库来管理学生毕业设计时的教师和学生数据。毕业设计时,一名教师指导多位学生,每位学生必须有一名教师指导其毕业设计论文。

(2)E-R模型

E-R图如图2-2所示。实体型如下:

图2-2 教师实体集与学生实体集的一对多联系

教师(教师号,姓名,院系,电话)

学生(学号,姓名,性别,出生日

期,所属院系)

(3)关系模型的表示方法

教师(教师号,姓名,院系,电话)

学生(学号,姓名,性别,出生日期,所属院系,教师号

注意:1∶n联系的E-R数据模型转换为关系数据模型时,一定是父实体关系中的关键字置于子实体关系中。反之不可。

3.多对多联系的转换

多对多(m∶n)联系的E-R数据模型转换为关系模型的转换策略是把一个m∶n联系分解为两个1∶n联系,分解的方法是建立第三个关系(称为“纽带”关系)。原来的两个多对多实体分别对应两个父关系,新建立第三个关系,作为两个父关系的子关系,子关系中的必有属性是两个父关系的关键字。

例2-4】学生和社团问题。需求分析和E-R模型见第1章【例1-5】。

(1)对应社团实体和学生实体分别建立社团关系和学生关系

社团(编号,名称,地点,电话)

学生(学号,姓名,性别,出生日期,所属院系)

(2)建立第三个关系表示社团关系与学生关系之间具有m∶n联系

为了表示社团关系和学生关系之间的联系是多对多联系,建立第三个关系“成员”,把“社团”关系和“学生”关系的主关键字放入“成员”关系中,用关系“成员”表示“社团”关系与“学生”关系之间的多对多联系。“成员”关系的主关键字是“编号+学号”,同时编号和学号又是这个关系的外部关键字。

成员(编号,学号)

综上所述得到的关系模型的关系模式:

社团(编号,名称,地点,电话)

学生(学号,姓名,性别,出生日期,所属院系)

成员(编号,学号)

上述转换过程实际上是把一个多对多联系拆分为两个一对多联系。社团关系与成员关系是一个1∶n联系;学生关系与成员关系也是一个1∶n联系。成员关系有两个父关系:社团和学生,同样成员关系同时是学生和社团关系的子关系。子关系的关键字是父关系关键字的组合:编号+学号;学号和编号又分别是子关系的两个外部关键字。

例2-5】学生与选修课程之间的情况。每个学生会选择多门课程,每门课程也对应多名学生选修。需求分析和E-R模型见第1章【例1-6】和图1-12。

转换多对多(m∶n)联系的策略是首先为学生实体和课程实体分别建立对应的关系,然后建立第三个关系“学生成绩”,用第三个关系表示“学生”与“课程”之间多对多的联系。第三个关系“学生成绩”中必须具有的属性是学生关系的关键字“学号”和课程关系的关键字“课程号”。根据具体情况还可能有其他属性,例如学生成绩。由此得到如下关系模式:

学生(学号,姓名,性别,出生日期,院系)

课程(课程号,课程名,开课单位,学时数,学分)

学生成绩(学号,课程号,成绩)

上述转换过程也是把一个多对多联系拆分为两个一对多联系。学生关系与学生成绩关系是一个1∶n联系;课程关系与学生成绩关系也是一个1∶n联系。学生成绩关系有两个父关系:学生和课程,同样学生成绩关系同时是学生和课程的子关系。子关系的关键字是父关系关键字的组合:学号+课程号;学号和课程号又分别是子关系的两个外部关键字。

综上所述,E-R数据模型转换为关系数据模型的方法如表2-5所示。

表2-5 E-R数据模型转换为关系数据模型的方法

4.多元联系E-R模型转换为关系模型

例2-6】仓库-员工-订单-供应商。需求分析和E-R模型见第1章【例1-7】和图1-13。

本例的E-R数据模型转换为关系数据模型的步骤如下。

(1)首先为每个实体建立与之相对应的关系

仓库(仓库号,仓库名,地点,面积)

员工(员工号,姓名,性别,出生日期,婚否,工资)

订单(订购单号,订购日期,金额)

供应商(供应商号,供应商名,地址)

(2)分别处理每两个关系之间的联系

1)仓库关系与员工关系之间具有一对多联系(见E-R模型),应该把仓库关系(父关系)的关键字“仓库号”放入员工关系(子关系),员工关系有了外部关键字“仓库号”,以此表示仓库关系与员工关系之间的1∶n联系。

2)员工关系与订单关系之间同样具有一对多联系,员工关系的关键字“员工号”放入订单关系,使订单关系有外部关键字“员工号”,以此表示员工关系与订单关系之间的1∶n联系。

3)供应商关系与订单关系之间也具有一对多联系,供应商关系的关键字“供应商号”放入订单关系,使订单关系有外部关键字“供应商号”,以此表示供应商关系与订单关系之间的1∶n联系。

综上所述,得到如下关系数据模型:

仓库(仓库号,仓库名,地点,面积)

员工(员工号,姓名,性别,出生日期,婚否,工资,仓库号

订单(订购单号,订购日期,金额,员工号供应商号

供应商(供应商号,供应商名,地址)

请完成【例1-8】产品销售数据E-R模型转换为关系模型的工作。