第七章数据库设计和ER模型
7.1设计模型概览
7.2ER模型
-
一个数据库可以建模如下:
-
- 一组实体集
- 多个实体间的相互关联
-
实体:现实世界中可以区别于所有其他对象的一个“事物”或“对象”
例如:特定的人,公司,事件,植物。
- 属性:
例如:人的名字
-
简单属性和复合属性:name和Firstname、lastname
-
单值数型和多值属性:phone_number(一个人有多个电话号码)
-
派生属性:年龄从生日中派生
-
实体集:相同类型即具有相同的性质(或属性)的一个实体集合
例如:所有人,公司,树木。
- 联系集:相同类型联系的集合,是n>=2个(可能相同的)实体集上的数学联系。如果E1, E2,…, En为实体集,那么联系集R是 { (e1, e2, … en) | e1∈ E1, e2∈E2, …, en ∈En}
举例: (44553,22222) ∈advisor
- 关系集:联系也可以具有描述性属性。
例如:考虑实体集 instructor 和 student 之间的联系集 advisor 。 我们可以将属性 date 与该联系关联起来,以表示教师成为学生的导师的日期。
-
联系集的度
-
- 涉及几个实体集度就是几
-
域:每一个属性都有一个可取值的集合
7.3约束
-
映射基数:表示一个实体通过一个联系集能关联的实体的个数。
-
-
对于实体集A和B之间的二元联系集R来说,映射基数必然是以下几种情况之一:
-
- 一对一
- 一对多
- 多对一
- 多对多
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WTfuOFS9-1588946846773)(C:\Users\60917\AppData\Roaming\Typora\typora-user-images\1588946527024.png)]
-
参与:实体集之间的关联称为参与,即实体参与联系
-
- 如王军选修“数据库基础”,表示实体“王军”与“数据库基础”参与了联系“选修”。
-
码
-
-
超码:是一个或多个属性的集合,这些属性的值可以使我们唯一地标识一个实体。
-
候选码:最小的超码。
-
- ID是instructor的候选码
- Course_id 是course的一个候选码
-
主码:选定一个候选码担任主码。
-
-
联系集的码
-
-
产于实体集合的主码组合形成联系集的超码。
-
- (S_id,i_id)是advisor的超码
- NOTE:这意味着一对实体在特定联系集中至多有一个关系。(两个实体之间除了联系集中的关系不会有其他的关系在这个表中展现)
-
决定候选码的时候必须要考虑联系集的映射基数。
-
在选择主码的时候要考虑联系集的语义信息以防有多个候选码。
-
7.4冗余属性
-
假设我们拥有实体集
-
- instructor,具有属性dept_name
- department
和一个关系
-
inst_dept联系instructor和department
-
在这种情况下,实体中的属性是冗余的,需要去掉dept_name这个属性。
-
但是在某些情况下,需要这种冗余。
7.5实体-联系图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DDFCxPXM-1588946846776)(C:\Users\60917\AppData\Roaming\Typora\typora-user-images\1588946573413.png)]
- 分成两部分的矩形代表实体集
- 菱形代表联系集
- 属性在实体集矩形中列出
- 构成主码的属性以下划线表明
拥有复合,多值,派生属性的实体
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tEAg1Bqj-1588946846778)(C:\Users\60917\AppData\Roaming\Typora\typora-user-images\1588946589224.png)]
- 复合属性:例如上述中的name由多个属性复合而成。
- 多值属性:{phone_number} ,一个人可以有多个电话号码。
- 派生属性:age(),这个属性是由出生日期所派生出来的。
拥有属性的联系集
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4GuNr6IW-1588946846779)(C:\Users\60917\AppData\Roaming\Typora\typora-user-images\1588946608156.png)]
角色
-
一个关系的实体集必须是互异的
-
- 实体在联系中扮演的功能称为实体的角色
-
标签“coures_id”和“prereq_id”被称为角色
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iGOSD9Kj-1588946846780)(C:\Users\60917\AppData\Roaming\Typora\typora-user-images\1588946622978.png)]
基数约束
-
我们在所讨论的联系集和实体集之间画一个箭头(®)或一条线段(-)来表示基数约束。
-
- 箭头:表示单
- 线段:表示多
-
可选标记:
-
- 基本的基数约束:m:1,m:n
- 更精确的基数约束:给出上下界的约束1…h,0…*(多),0…1(一)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xlUMdMxo-1588946846783)(C:\Users\60917\AppData\Roaming\Typora\typora-user-images\1588946658581.png)]
联系集中实体集的参与
- 全部参与(用双线表示):实体集中的每个实体在联系集中至少参与了一个关系。
- 部分参与:一些实体在联系集中可能不参与任何关系。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Czkd6eNE-1588946846784)(C:\Users\60917\AppData\Roaming\Typora\typora-user-images\1588946670982.png)]
一个三元关系的E-R图(未完)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MkaTLpPw-1588946846786)(C:\Users\60917\AppData\Roaming\Typora\typora-user-images\1588946682112.png)]
三元关系上的基数约束(解决方案:拆开)
-
一个三元关系上至多有一个箭头表示基数约束
-
如果多于一个箭头,那么就有两种表示方式。
-
- 假设一个三元关系R由A,B和C组成,B到C的箭头表示
弱实体集
-
没有足够的属性以形成主码的实体集称为弱实体集。
-
弱实体集存在依赖于标识实体集
-
- 标识性联系是从弱实体集到标识实体集多对一的,并且弱实体集在联系中的参与是全部的。
- 标识性联系以双菱形表示。
-
弱实体集的分辨符是使得我们可以区分依赖于特定强实体集的弱实体集中的实体的属性的集合。
-
弱实体集的主码是由标识实体集的主码加上该弱实体集的分辨符构成。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dzazsN7c-1588946846789)(C:\Users\60917\AppData\Roaming\Typora\typora-user-images\1588946702775.png)]
- 弱实体集的分辨符以虚下划线标明,而不是实线。
- section的主码是(coures_id,sec_id,semester,year)
7.6转换为关系模式
模式的冗余
-
多对一和一对多联系集中全部参与的“many”一方可以通过增加额外的属性来表示,包含“one”一方的主码。
-
对于一对一的联系集,任意一边都可以作为“many”一方
-
- 额外的属性可以加到类似于两个实体集的任意一个表中
-
若many一方是部分参与,利用“many”一方存在额外属性会导致存在空值。
复合多值属性
-
复合多值属性可以再划分为更小的部分
-
实体E的多值属性M用一个单独的关系模式EM表示(新建一个表)
-
- 关系模式EM有和E的主码相关的属性,有一个和多值属性M相关的属性.
- 例如:instructor中多值属性phone_number用以下关系模式表示:inst_phone=(ID,phone_number)
7.7设计问题
- 用实体集还是属性集
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ei0yysVf-1588946846790)(C:\Users\60917\AppData\Roaming\Typora\typora-user-images\1588946737896.png)]
-
用实体集还是联系集
-
- 当描述是发生在实体间的行为时采用联系集
将非二元联系转换为二元关系形式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i5Z7f7jh-1588946846792)(C:\Users\60917\AppData\Roaming\Typora\typora-user-images\1588946760085.png)]
7.8扩展的E-R特性
- 在E-R途中,特化用从特化实体指向另一个实体的空心箭头来表示.
- 属性继承-高层实体集的属性可以被底层实体集继承
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0yuxlURA-1588946846793)(C:\Users\60917\AppData\Roaming\Typora\typora-user-images\1588946775047.png)]
- 概化:自底而上的设计过程,多个实体集根据共同的特征综合成一个较高层的实体集.
关系形式
[外链图片转存中…(img-i5Z7f7jh-1588946846792)]
7.8扩展的E-R特性
- 在E-R途中,特化用从特化实体指向另一个实体的空心箭头来表示.
- 属性继承-高层实体集的属性可以被底层实体集继承
[外链图片转存中…(img-0yuxlURA-1588946846793)]
- 概化:自底而上的设计过程,多个实体集根据共同的特征综合成一个较高层的实体集.
- 概化只不过是特化的逆过程。