文章目录
第七章:数据库设计和E-R模型
7.1 设计过程概览
在软件开发中,需要经历这几个阶段
其中设计过程中需要进行数据库设计
关于E-R模式的引入
设计E-R模型的观点是,世界是由一组称为实体的基本对象和这些对象之间的联系构成的
E-R图的作用
帮助澄清用户数据需求,使分析人员和用户对数据需求达成高度一致
是数据逻辑模型设计的基础
7.2 实体-联系模型
7.2.1 实体集
几个概念
- 实体:实体是现实世界中可区别于其它事物的一个对象。例如在大学中,每一个人都是一个实体
- 实体集:实体集是指具有相同性质的实体的集合
实体通过一组属性来表示,属性是实体中每个成员所具有的特性
每个实体的每个属性都有一个值,数据库包含若干实体集,每个实体集中包含任意数量和相同类型的实体
属性的类型
- 简单属性:不可再分的属性
- 复合属性:可以划分为更小的属性,如Birthday = year + month + day
- 单值属性:每个实体在该属性上的取值唯一
- 多值属性:每个实体在该属性上的取值可以有多个,比如一个教师可能有多个电话号码
- 派生属性:可以从其它相关属性或实体派生出来的属性,如教师(编号,姓名,出生日期,年龄),其中年龄即为派生属性,年龄可由当前年份-出生日期得到
各种属性在E-R图中的表示
7.2.2 联系集
联系是指多个实体间的相互关联
比如可以定义关于学生和老师之间的联系advisor
联系集是指相同类型联系的集合
几个基本概念
- 参与:实体之间的关联被称为参与,即实体参与联系。如果实体集E中的每个元素都参与到联系R中,则称E完全参与R,如果只有部分,则称部分参与
- 角色:实体在联系集中的作用被称为角色
加上标注说明表示不同的角色
7.3 约束
7.3.1 映射基数
映射基数表示一个实体通过一个联系集能关联的实体的个数
对于实体集A和B之间的二元联系R而言,映射基数只能是以下几个
- 一对一:A中的一个实体至多与B中的一个实体联系,反之亦然
- 一对多:A中的一个实体可以与B中任意数目的实体相联系
- 多对一:B中的一个实体可以与A中任意数目的实体相联系
- 多对多:A,B互相可以与多个实体关联
注意一对一不是一 一对应
7.5 实体-联系图
7.5.1 基本结构
E-R图包括如下几个主要构件
- 分成两部分的矩形代表实体集
- 菱形代表联系集
- 为分割的矩形代表联系集的属性
- 线段将实体集连接到联系集
- 虚线将联系集属性连接到联系集
- 双线表示实体在联系集中的参与度
- 双菱型代表连接到弱实体集的标志联系集
7.5.2 映射基数
- 一对一:用双箭头表示
- 一对多:用单箭头表示,指向一
- 多对一:同上
- 多对多:用线段表示
E-R图还提供了一种描述每个实体参与联系集中的联系的次数
用l…h表示
l表示最小的映射基数,h表示最大的映射基数
1表示这个实体集在该联系中全部参与,最大值*表示没有限制
7.5.6 弱实体集
如果一个实体的所有属性合在一起都不足以形成主码,则称这样的实体为弱实体,反之称为强实体。同一类型的弱实体形成弱实体集
弱实体需要依赖属主实体而存在,不能独立存在
在E-R图中,弱实体集和强实体集有相似之处,但有两点主要的区别
- 弱实体集的分辨符以虚下划线标明,而不是实线
- 关联弱实体集与强实体集的联系集用双菱形表示
7.6 转换为关系模式
对于只有简单属性的强实体集,直接将E-R图转换为关系模式即可
7.6.2 具有复杂属性的强实体集的表示
对于复合属性:将每个组合属性作为复合属性所在实体的属性
对于多值属性:将其转换为新的关系+所在实体的主码
比如对于以下实体集
转换后的结果为
复合属性全部拆开,多值属性建了一张新的表
7.6.4 联系集的表示
模式的合并
在联系转换为关系的过程中,需要对生成的表进行合并
1.二元一对一联系
联系转化的表可以与任一端实体转化成的表进行合并
二元一对一联系不能导致相关实体转化成的表合并
比如有一个E-R图,转换为以下联系
Dept(dno, dname)
President(pid, pname)
Manage(dno, pid) //dno,pid均可作主码,假设选dno作主码
由于这个关系是一个二元一对一联系,因此可以将Dept表与Manage表合并
也可以将President表和Manage表合并
Dept+Manage -> Dept(dno, dname, pid)
或
President+Manage -> President(dno,pid,pname)
但是不能将三张表合并
2.二元多对一联系
联系转化的表可以和“多端” 实体转化成的表进行合并
考虑以下联系
可将学生表和隶属表合并,最终这个关系模型变为两张表
Dept(dno, dname)
Student(sno, sname)
SD(sno, dno, stime)
合并后
Student+SD -> Student(sno,sname,stime,dno)
3.二元多对多联系
直接定义为三张表,无法合并
实体转化成的表,相互之间不能合并
联系转化成的表,相互之间不能合并
后面还有一些内容,不是很重要,这里就暂时不整理了