关系数据模型可由基本E-R模型转换得到。二者基本要素的对应关系如表2-1所示。
表2-1 E-R模型与关系数据模型的要素对照表
(1)设E为只具有 n 个简单属性的实体,则关系E表示这 n 个属性的集合。
(2)实体的主键为转换得到的关系的主键。
(3)关系中的一个元组对应一个实体值。
例2-1 学生、校园卡、商户三个实体分别转换为一个关系,如图2-2所示。
图2-2 实体转换为关系
E-R模型转换为关系数据模型的过程,可能会遇到E-R模型具有复合属性、多值属性、派生属性等不规范的设计。转换的时候要进行处理,保证关系数据模型中的属性都是简单属性。
1. 复合属性
如果实体具有复合属性,可以用子属性替代复合属性,也可以把复合属性升级为一个实体,用一个新的关系表示。
2. 多值属性
多值属性需要升级为一个新的关系。例如,对于实体的一个多值属性M,构建关系R,该关系由M及M所在的实体的主键构成。R的主键是由其所有属性构成的全键。R的外键是由M所在实体的主键生成的属性。
3. 派生属性
派生属性不在关系模式中显性表示,只在需要时通过计算得到。
例2-2 将图2-3中的“教师”实体转换为关系。
图2-3 复杂属性的表示示例
其中,复合属性“通信地址”和“街道”需要用不可再分的子属性替代。多值属性“电话号码”需要构建一个关系teacher_phone。该关系的主键是(TID,phone),外键是TID。派生属性“年龄”不出现在关系中。
联系也用关系表示,关系的属性包括所有参与该联系的实体的主键及联系本身的描述性属性。
1. 1:1联系的表示
1:1联系的表示方法是把任意一端的主键及联系本身的属性与另一端对应的关系合并。
例2-3 学生和校园卡是1:1联系,第一种转换方式是把CID作为外键并入关系student,第二种转换方式是把SID作为外键并入关系card,如图2-4所示。
图2-4 1:1联系的表示示例
2. 1 : n 联系或 n : 1联系的表示
1: n 联系或 n :1联系的表示方法是把“1”端的关键字及联系的属性与“ n ”端对应的关系合并。合并后的关系的键是“ n ”端实体的键。
例2-4 如果每名学生有一位毕业论文指导教师,一位教师可以指导多名学生完成毕业论文。教师和学生之间是1: n 联系,把教师实体的主键与学生实体对应的关系合并,合并后的关系student中SID为主键,TID为外键,如图2-5所示。
3. m : n 联系的表示
m : n 联系必须转换为一个新的关系,否则会导致数据冗余。新关系的属性包括与该联系相关的各实体的键,以及联系的属性。各实体主键的集合构成了该关系的主键,各主键对应的属性是该关系的外键。
图2-5 1: n 或 n :1联系的表示示例
例2-5 商户与校园卡之间是 m : n 联系。该联系表示为消费清单(卡号,编号,消费金额,消费日期),有两个外键卡号、商户编号,如图2-6所示。
图2-6 m : n 联系的表示示例
salebill(CID,BID,payamount,saledate)的主键是什么?
一张校园卡可以在多家商户消费,所以CID不能唯一标识一个元组。一个商户可以接受多张校园卡消费,所以BID也不能唯一标识一个元组。同一张校园卡可以在同一家商户多次消费,所以(CID,BID)也不能唯一标识一个元组。
(BID, saledate)是主键吗?一个商户一天可以接受多张校园卡的消费,可见(BID,saledate)不能唯一标识一个元组。
(CID,saledate)是主键吗?一张校园卡在同一天可以多次消费,(CID,saledate)有可能对应多个消费记录,不能唯一标识一个元组。
(CID,BID,saledate)是主键吗?依然不是,因为同一张校园卡同一天可能在同一个商户多次消费,表中可能有多个元组的这三个属性组合的值是一样的。
同理,(CID,BID,payamount,saledate)也不能唯一标识一个元组,因为同一张校园卡同一天在同一个商户的多次消费的金额可能相同。
为了能够标识每一笔消费,需要为每一笔消费生成一个流水号,一个流水号只对应一笔消费,一笔消费只有一个流水号。流水号是消费清单的主键。
综上,校园卡管理系统中的E-R模型可转换为以下四个关系,如图2-7所示。其中,“ ”标示主键,“ ”标示外键。
图2-7 校园卡管理系统的关系
多元联系的转换方法与二元联系转化方法相同,具体表述如下。
(1)1:1:1联系可以把任意两个实体的键,以及联系的属性放在第三个实体的关系中。
(2)1:1: n 联系可以把两个1端实体的键,以及联系的属性放在 n 端实体的关系中。
(3)1: m : n 联系转换成由 m 端和 n 端实体的键,以及联系的属性构成的新关系,新关系的键为 m 端和 n 端实体的键的组合。
(4) m : n : p 联系转换成由三端实体的键,以及联系的属性构成的新关系,新关系的键为三个实体的键的组合。