2.5 概念模型向逻辑模型的转换
由于概念模型中最常用的是E-R模型,逻辑模型中最常用的是关系模型,所以,下面主要讲E-R模型如何有效地转换为关系模型。
2.5.1 转换原则
从写文章的角度说,每个段落应只有一个主题。若一个段落有多个主题,必须将其分成两段或者多段,使之都有唯一的主题。关系数据库其实是一个表的集合。在通常情况下,每个表中的数据有且只有一个主题。若一个表中有两个或多个主题,也需要将其分解为两个或多个表。具体数据库表的形成就是概念模型向逻辑模式转换过程中,形成多张表的逻辑结构。
关系模型的逻辑结构是一组关系模式的集合。E-R模型由实体、实体的属性及实体之间的联系三部分组成,因此,将E-R模型转换为关系模型实际上就是将实体、实体的属性和实体间的联系转换为关系模式,转换的一般规则如下:一个实体转换为一个关系模式。
实体的属性就是关系的属性。对于实体间的联系有以下不同的情况:
1)一个1∶1联系可以转换为一个独立的关系模式,也可以与任意一端所对应的关系模式合并。如果可以转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码。如果某一端实体对应的关系模式合并,则需要在该关系模式的属性中加入一个关系模式的码和联系本身的属性。
2)一个1∶n联系可以转换为一个独立的关系模式,也可以与n端所对应的关系模式合并。如果可以转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。
3)一个m∶n联系可以转换为一个独立的关系模式,与该联系相连的各实体的码,以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分。
2.5.2 转换实例
在概念模型向逻辑模式转换过程中要遵循以下规则。
规则1.1 实体类型的转换:将每个实体类型转换成一个关系模式,实体的属性即为关系的属性,实体的码即为关系模式的码。
规则1.2 联系类型的转换:根据不同的联系类型做不同的处理。
1)若实体间联系是1∶1,可以在两个实体类型转换成的两个关系模式中任意一个关系模式中加入另一个关系模式的码和联系类型的属性。
2)若实体间的联系是1∶n,则在n端实体类型转换成的关系模式中加入1端实体类型的码和联系类型的属性。
3)若实体间联系是m∶n,则将联系类型也转换成关系模式,其属性为两端实体类型的码加上联系类型的属性,而码为两端实体码的组合。
4)3个或3个以上的实体间的一个多元联系,不管联系类型是何种方法,总是将多元联系类型转换成一个关系模式,其属性为与该联系相连的各实体的码及联系本身的属性,其码为各实体码的组合。
5)具有相同码的关系可合并。
【例2-1】将图2-10中含有1∶1联系的E-R图根据上述规则转换为关系模式。
图2-10 二元1∶1联系转换为关系模式的实例
该例包含两个实体,实体间存在着1∶1的联系,根据规则可转换为如下关系模式(带下画线的属性为码)。
方案一:“负责”与“职工”两关系模式合并,转换后的关系模式为:
职工(职工号,姓名,年龄,产品号)
产品(产品号,产品名,价格)
方案二:“负责”与“产品”两关系模式合并,转换后的关系模式为:
职工(职工号,姓名,年龄)
产品(产品号,产品名,价格,职工号)
将上面两个方案进行比较,方案一中,由于并不是每个职工都负责产品,就会造成产品号属性的NULL值较多,所以,方案二比较合理一些。
【例2-2】将图2-11中含有1∶n联系的E-R图根据上述规则转换为关系模式。
图2-11 二元1∶n联系转换为关系模式的实例
该例包含两个实体,实体间存在着1∶n的联系,根据规则1.1和规则1.2中的2可转换为如下关系模式(带下画线的属性为码):
仓库(仓库号,地点,面积)
产品(产品号,产品名,价格,仓库号,数量)
【例2-3】将图2-12中含有同实体集1∶n联系的E-R图根据上述规则转换为关系模式。
图2-12 实体集内部1∶n联系转换为关系模式的实例
该例只有一个实体,实体集内部存在着1∶n的联系,根据规则1.1和规则1.2中的2可转换为如下关系模式(带下画线的属性为码):
职工(职工号,姓名,年龄,领导工号)
其中,“领导工号”就是领导的“职工号”,由于同一关系中不能有相同的字段名,故将领导的“职工号”改为“领导工号”。
【例2-4】将图2-13中含有m∶n联系的E-R图根据规则转换为关系模式。
该例包含两个实体,实体间存在着m∶n的联系,根据规则1.1和规则1.2中的3)可转换为如下关系模式(带下画线的属性为码):
商店(店号,店名,店址,店经理)
商品(商品号,商品名,单价,产地)
经营(店号,商品号,月销售量)
【例2-5】将图2-14中同实体集间含有m∶n联系的E-R图根据规则转换为关系模式。
图2-13 二元m∶n联系转换为关系模式实例
图2-14 同一实体集内m∶n联系为关系模式的实例
该例只有一个实体,实体集内部存在着m∶n的联系,根据规则1.1和规则1.2中的3)可转换为如下关系模式(带下画线的属性为码):
零件(零件号,名称,价格)
组装(组装件号,零件号,数量)
其中,“组装件号”为组装后的复杂零件号,由于同一个关系中不允许存在同字段名,因而改为“组装件号”。
【例2-6】将图2-15中同实体集间含有m∶n联系的E-R图根据规则转换为关系模式。
该例包含3个实体,3个实体间存在着m∶n的联系,根据规则1.1和规则1.2中的4)可转换为如下关系模式(带下画线的属性为码):
供应商(供应商号,供应商名,地址)
零件(零件号,零件名,单价)
产品(产品号,产品名,型号)
供应(供应商号,零件号,产品号,数量)
图2-15 多实体集间联系转换为关系模式的实例