刘红岩 清华大学 管理科学与工程系 liuhy@sem.tsinghua.edu.cn 第6章 ER模型向关系模型的转换 刘红岩 清华大学 管理科学与工程系 liuhy@sem.tsinghua.edu.cn
主要内容 基本ER数据模型的转换 增强ER数据模型的转化 实体 联系 属性 特殊化/概括 聚集 Hongyan Liu @ Tsinghua University
ER图 案例 部门 部门号{PK} 部门名 电话[1..2] 供应商 编号{PK} 供应商名称 城市 1..1 组成 包含 1..* 1..* 1..* 0..* 0..* 职工 职工号{PK} 姓名 性别 生日 工程 工程号{PK} 开始日期 完成日期 零件 零件号{PK} 零件名 重量 颜色 1..* 工作于 0..* 供应 0..* 1 1 1..1 0..1 主管 拥有 1..1 拥有 1..* 家属 姓名 年龄 关系 Hongyan Liu @ Tsinghua University
ER图向关系模型的转换 ①一个实体转换为一个关系模式,实体的属性就是关系的属性,对于非原子属性,进行横向(如电话)或纵向(如地址)展开。对于弱实体,其主键由其所依赖的实体的键和本身的某些属性共同组成。 部门(部门号,部门名,联系电话)一个部门只有一个联系电话 职工(部门号,职工号,职工姓名,性别,年龄) 家属(职工号,家属姓名,年龄,关系) Hongyan Liu @ Tsinghua University
ER图向关系模型的转换 问题:实体的主键一定是关系的主键吗?如:部门的联系电话若有多个时,主键? 部门号 部门名 联系电话 B1 部门1 62789999 62789998 B2 部门2 62782333 Hongyan Liu @ Tsinghua University
ER图向关系模型的转换 ②一个联系转换为一个关系模式,与该联系相连的各实体的键及联系本身的属性作为关系模式的属性,一般情况下,其主键有三种情况: a.1:1: 每个实体的主键都可作为关系的主键。 b.1:*: 多端实体的主键。 c.*:*:两个实体的主键组合起来。 如部门和职工之间的包含联系: 部门号 部门名 联系电话 B1 部门1 62789999 62789998 B2 部门2 62782333 部门号 职工号 B1 94238 87993 B2 59083 职工号 姓名 性别 年龄 94238 张三 … 87993 王二 59083 李四 Hongyan Liu @ Tsinghua University
ER图向关系模型的转换 为了减少关系模式的个数: 对于1:1的两个实体 双方都是全参与, 什么语义? 如教师与房间(1人1房间) 把其中任一个实体的主键及联系本身属性加入到另一个之中 teacher(tno,tname,…,rno) room(rno, rdirection) teacher(tno,tname,…) room(rno, rdirection, tno) 联系本身属性可以是什么? Hongyan Liu @ Tsinghua University
ER图向关系模型的转换 工作证号 姓名 性别 年龄 房间号 94238 张三 … 201 87993 王二 203 59083 李四 204 朝向 201 南 203 北 204 工作证号 姓名 性别 年龄 94238 张三 … 87993 王二 59083 李四 房间号 朝向 工作证号 201 南 94238 203 北 87993 204 59083 Hongyan Liu @ Tsinghua University
ER图向关系模型的转换 一方是全参与,另一方是部分参与:为了避免取NULL值,将部分参与方的实体主键加入另一方中 例1:设教师是全参与: 语义? t(tno,tname,…, rno) r(rno, rdirection) 否则,若为:t(tno,tname,…) r(rno, rdirection, tno) Hongyan Liu @ Tsinghua University
ER图向关系模型的转换 例2:职工与工程之间的主管关系:ER 图案例 房间号 朝向 201 南 203 204 北 205 工作证号 姓名 性别 年龄 房间号 94238 张三 … 201 87993 王二 203 59083 李四 204 房间号 朝向 工作证号 201 南 94238 203 87993 204 北 59083 205 工作证号 姓名 性别 年龄 94238 张三 … 87993 王二 59083 李四 例2:职工与工程之间的主管关系:ER 图案例 Hongyan Liu @ Tsinghua University
ER图向关系模型的转换 双方都是部分参与: 联系单独作为一个关系模式,其属性由双方各自主键和联系本身的属性共同构成 t(tno,tname,…) r(rno, rdirection) teacherRoom(rno, tno, begindate) 否则:t(tno,tname,…,rno,begindate) r(rno, rdirection) 或 t(tno,tname,…) r(rno, rdirection, tno, begindate) 会有什么问题? Hongyan Liu @ Tsinghua University
ER图向关系模型的转换 工作证号 姓名 性别 年龄 94238 张三 … 87993 王二 59083 李四 房间号 工作证号 日期 201 97-8-1 203 87993 96-3-10 房间号 朝向 201 南 203 北 204 房间号 朝向 201 南 203 北 204 工作证号 姓名 性别 年龄 房间号 94238 张三 … 201 87993 王二 203 59083 李四 房间号 朝向 工作证号 201 南 94238 203 北 87993 204 工作证号 姓名 性别 年龄 94238 张三 … 87993 王二 59083 李四 Hongyan Liu @ Tsinghua University
ER图向关系模型的转换 对于1对多的联系,只需将1端实体的主键及联系本身的属性加入到多端实体中即可。 系,班级之间的联系体现在多端实体中: 系(系名,系主任,电话) 班级(系名,班名,人数) Hongyan Liu @ Tsinghua University
ER图向关系模型的转换 若有的班级不属于任何一个系,则为了避免系名取空值,可将联系单独作为一个关系模式 若多端实体是部分参与,可将联系单独作为一个关系模式。 若有的班级不属于任何一个系,则为了避免系名取空值,可将联系单独作为一个关系模式 系(系名,系主任,电话), 班级(班名,人数), 系籍(系名,班名) 部门与职工之间的联系:ER 图案例 Hongyan Liu @ Tsinghua University
ER图向关系模型的转换 例子:职工:工程;零件:零件 多对多联系:联系单独作为一个关系模式,除联系本身属性外,将相连实体的主键加入。 零件号 零件(零件号,零件名,重量,颜色) 零件构成(零件号,子零件号,数目) 零件号 零件名 重量 颜色 P1 零件1 … P2 零件2 P3 零件3 P4 零件4 零件号 子零件号 数目 P3 p1 2 p2 4 P4 5 Hongyan Liu @ Tsinghua University
ER图向关系模型的转换 多元联系 一般需要将联系单独作为一个关系模式,将各个相关的关系模式的主键组合起来加上联系的属性构成它的属性 例子:工程、供应商和零件之间的联系 供应(工程号, 供应商编号, 零件号, 数量) 工程号 供应商编号 零件号 数量 J1 S1 P1 300 S2 P2 200 J2 400 S3 P3 100 Hongyan Liu @ Tsinghua University
ER图 案例 部门 部门号{PK} 部门名 电话[1..2] 供应商 编号{PK} 供应商名称 城市 1..1 组成 包含 1..* 1..* 1..* 0..* 0..* 职工 职工号{PK} 姓名 性别 生日 工程 工程号{PK} 开始日期 完成日期 零件 零件号{PK} 零件名 重量 颜色 1..* 工作于 0..* 供应 0..* 1 1 1..1 0..1 主管 拥有 1..1 拥有 1..* 家属 姓名 年龄 关系 Hongyan Liu @ Tsinghua University
ER图向关系模型的转换 部门(部门号,部门名,联系电话) 职工(部门号,职工号,职工姓名,年龄) 家属(职工号,家属姓名,性别,关系) 工程(工程号,名称,起始日期,终止日期,主管职工号) 工作于(职工号,工程号,期限) 供应商(供应商编号, 供应商名称, 城市) 零件(零件号,零件名,重量,颜色) 供应(工程号, 供应商编号, 零件号, 数量) 零件构成(零件号,子零件号,数目) Hongyan Liu @ Tsinghua University
EER数据模型向关系模型的转换
特殊化/概括:方案1 S(sno, sname, sex, birthdate, province) U(sno, 高考分数,省状元) Student Graduate Undergraduate {Mandatory, Or} Doctor S(sno, sname, sex, birthdate, province) U(sno, 高考分数,省状元) G(sno, type, 录取方式) D(sno,married,parttime) sno 高考分数 省状元 990011 660 N 990012 680 Y sno sname sex birthdate province 990011 张珊 F 80-3-2 河北 990012 李四 M 81-5-6 河南 990211 王二 75-8-29 山东 990300 赵娜 73-9-3 山西 方案2:不相交和全特殊化:倘若是相交特殊化,则会有冗余,若是部分特殊化,则有些学生遗失。 Sno type 录取方式 990211 直硕 免试 Sno married parttime 990300 N Hongyan Liu @ Tsinghua University
方案2:不相交、全特殊化 U(sno, sname, sex, birthdate, province,高考分数,省状元) G(sno, sname, sex, birthdate, province ,type, 录取方式) D(sno, sname, sex, birthdate, province, married, parttime) sno sname sex birthdate province 高考 分数 省 状元 990011 张珊 F 80-3-2 河北 660 N 990012 李四 M 81-5-6 河南 680 Y Student Graduate Undergraduate {Mandatory, Or} Doctor sno sname sex birthdate province type 录取 方式 990211 王二 M 75-8-29 山东 直硕 免试 方案2:不相交和全特殊化:倘若是相交特殊化,则会有冗余,若是部分特殊化,则有些学生遗失。 若相交会有何问题?部分特殊化呢? sno sname sex birthdate province married parttime 990300 赵娜 F 73-9-3 山西 N Hongyan Liu @ Tsinghua University
方案3:不相交特殊化{.., or} Student Graduate Undergraduate {Mandatory, Or} Doctor S(sno, sname, sex, birthdate, province, 高考分数,省状元,type, 录取方式, married, parttime, T) T=i:表示实体属于实体集i. T=0:不属于任何一个子实体集 sno sname sex birthdate province 高考分数 省状元 type 录取方式 married parttime T 990011 张珊 F 80-3-2 河北 660 N 1 990012 李四 M 81-5-6 河南 680 Y 990211 王二 75-8-29 山东 直硕 免试 2 990300 赵娜 73-9-3 山西 3 Hongyan Liu @ Tsinghua University
方案4:重叠特殊化{.., and} Student Staff Person {Optional, And} Person(pID, name, sex, birthdate, empID, deptno, studNo, classNo, T1, T2) pID sname sex birthdate empID deptNo studNo classNo T1 T2 110105750801666 张珊 F 80-3-2 990011 j01 1 … 李四 M 81-5-6 990012 j02 王二 75-8-29 95234 mse 990211 j03 赵娜 73-9-3 89455 Hongyan Liu @ Tsinghua University
聚集的转换 聚集:作为联系转换 在转换聚集参与的联系时,将聚集看作一个实体集看待,其属性包括参与联系的各实体的主键以及联系本身的属性组成。 时间 时间编号{PK} 学期 星期 节 先修于 聚集:作为联系转换 在转换聚集参与的联系时,将聚集看作一个实体集看待,其属性包括参与联系的各实体的主键以及联系本身的属性组成。 讲授(教室工作证号,课号,时间编号,楼号,教室号) 选修(教室工作证号,课号,时间编号,学号,成绩) 1..* 0..* 0..* 教师 工作证号{PK} 姓名 性别 职称 课程 课号{PK} 课名 学分 学时 1..* 1..1 讲授 楼名 教室号 0..* 成绩 选修 1..* 学生 学号{PK} 姓名 性别 生日 Hongyan Liu @ Tsinghua University