第五章、数据库设计与E-R模型
数据库整体设计流程
- 1、刻画数据库用户需求
- 2、概念设计
- 3、逻辑设计
- 4、物理设计
本章讲解概念设计、逻辑设计
一、概念设计
1、E-R模型(实体-联系数据模型)
- 三个主要的组成部分:实体集、联系集、属性
1)、实体、实体集
-
实体:一个实体是现实世界可区别于所有其他对象的一个‘事物’或‘对象’
实体可以是实在的也可是抽象的,如一个人、课程、开设的课程段或者航班预订
例如:课程可以被开左实体,并且course_id唯一标识出了大学中某个课程实体 -
实体集:是共享相同性质或属性、具有的相同类型的实体的集合
- 所谓实体集就是同一类型实体的集合(一般是有限的)。注意!是同一类型实体的集合哦。
实体集中包含的是实体,可以把它理解成数学中的集合,例:{茉莉蜜茶、冰红茶、青梅绿茶}这就是一个实体集。 再比如{鲫鱼、鲤鱼、金龙鱼}这也是一个实体集,这两个实体集里分别只包含了三个实体
- 所谓实体集就是同一类型实体的集合(一般是有限的)。注意!是同一类型实体的集合哦。
-
属性:属性是每个实体集中每个成员所拥有的描述性性质
-
如instructor实体集可能具有的属性是:ID、name、dept_name和salary
-
每个实体在它的每个属性上都有一个值
-
实体集在E-R图中用一个矩形来表示
2)、复杂属性
- 复合属性:
复合属性可以被划分为子部分
- 多值属性
对一个实体而言,一个属性可以对应于多个值
假设往instructor实体集中添加一个phone_number属性,每个教师可以有零个、一个或多个电话号码,这种类型被称为多值属性 - 派生属性
这类属性的值可以从其他相关属性或实体的值派生出来
例如:instructor实体集具有age属性,如果instructor实体集还有date_of_birth属性,就可以从date_of_birth和当前日期计算出age属性的值,因此age就是派生属性
3)、联系集
- 联系:联系是多个实体间的相互关联
如:张三丰是武当派的老师,教太极拳
则老师和课程是教授关系,学生和课程是选择关系 - 联系集:相同类型联系的集合
- 实体集和实体集产生的联系很多构成联系集
实体集之间的关联被称为参与
上图可以描述为教师实体集和课程实体集参与到教学这个联系集
- 自己跟自己联系的时候,把对应的角色标识出来
- 联系集也可以有描述性属性,在图中通过虚线相连接
- 在一个实体集中,有下划线的属性代表主码
2、约束
1).映射基数约束
-
映射基数:一个实体能通过一个联系集关联另一个实体的数量
具体可分为四种 -
一对一
- A中的一个实体至多与B中的一个实体相关联,且B中一个实体也至多与A中的一个实体相关联
- A中的一个实体至多与B中的一个实体相关联,且B中一个实体也至多与A中的一个实体相关联
-
一对多
- A中的一个实体可以与B中任意数量的实体相关联、而B中的一个实体至多与A中的一个实体相关联
- A中的一个实体可以与B中任意数量的实体相关联、而B中的一个实体至多与A中的一个实体相关联
-
多对一
- 同上面的一对多
-
多对多
- A中的一个实体可以与B中的任意数量的实体相关联,而B中的一个实体也可与A中的任意数量的实体相关联
实体集双方,多的一方没剪头,一的一方有箭头
- A中的一个实体可以与B中的任意数量的实体相关联,而B中的一个实体也可与A中的任意数量的实体相关联
2).参与度约束
在E-R图中部分参与一方用单线连接,全部参与一方用双线连接
3).码的约束
方式 | 联系集主键 |
---|---|
一对一 | 双方任何一方的主键 |
一对多 | 多方的主键 |
多对多 | 双方主键的并集 |
E-R图中主码下面有横线
3、冗余
举例:
两个实体集:
Instructor(ID,name,dept_name,salary)
Department(dept_name,building,budget)
一个联系集:
Inst_dept(ID,dept_name)
通过消除实体集中多余的属性,保留联系集中的属性
弱实体集由于在实体集中消除多余的属性,没有足够的属性作为主码
依赖于另一个强实体集叫做标识性实体集
- 弱实体集:
弱实体集的存在依赖于另一个实体集,称为标识性实体集,我们使用标识性实体集的主码以及成为分辨符属性的额外属性来唯一的标识弱实体
section为弱实体集、它依赖的强实体集就是course,course_id和sec_id和semester和year在一起才能唯一标识一个section - section的标识性实体集是course
- sec_course是标识性联系
- section的主码由标识性实体集的主码加上弱实体集的分辨符构成
- 虚线就是分辨符
- 标识性联系用双菱形表示
- 通过双边框的矩形描述弱实体集
- 弱实体集是指不能独立存在的实体集,它们依赖于其他实体的存在来进行标识和区分。弱实体集没有足够的属性来唯一标识自己,必须与其他实体集相关联。在关系模型中,弱实体集的属性中通常包括一个外键,用于引用其所依赖的实体集
二、逻辑设计
把E-R图的信息转换为对应的关系表
处理复合属性
- 将复合的属性其下的子属性作为表中的一个属性,删除那个大的复合属性
举例:
处理多值属性
- 独立出一个表,把多值属性抽离出来,独立出来的表主码为原来的表的主码和多值属性,原来的表删去多值属性
- 最后这两个表可以用外键关联
例1:
弱实体集转换为关系表时
假设A为弱实体集,B为他所依赖的强实体集,A转换为关系表时,A的属性值中必须包含B的主码
例:
联系集转换为关系表
- 联系集属性包含两大部分:双方实体集的主码的并集和联系集额外的属性
- 联系集主码的确定:上图,一对一,一对多,多对多等多种情况确定联系集中属性的主码
- 例:
合并
- 例1
上图的instructor表和inst_dept表主码一样,合并为一个表,保留为instructor表,如下图
- 例2:
总结:一对多的关系,多方和联系集转换出的表可以合并
- 例3:
总结:连接弱实体集的联系集转换的表完全冗余,只剩下弱实体集转换的表