数据库系统原理与实践 笔记 #6
数据库设计和E-R模型
设计过程
- 设计数据库模式、设计访问更新数据库的程序、以及设计控制数据访问的安全模式
- 设计阶段:
- 概念设计阶段:构建实体-联系图
- 逻辑设计阶段:将实体-联系图映射到关系模式
- 物理设计模式:指明数据库文件组织格式和索引结构
- 设计问题:冗余、不完整
实体-联系模型
- 实体-联系(Entity-Relationship)模型:E-R模型是一种语义模型,在将现实世界事物的含义和相互关联映射到概念模式方面非常有用
- 采用三个基础概念:实体集、联系集、属性
- 一个数据库可以被建模为:实体的集合、实体间的联系
实体集
- 实体是现实世界可区别于所有其他对象的一个“事物”或“对象”
- 实体集是想同类型即具有相同性质(或属性)的一个实体集合
- 实体集的外延是指属于实体集的实体的实际集合
- 实体有属性,它是实体集中每个成员所拥有的描述性性质
- 每个实体的每个属性都有一个值
联系集
- 联系是指多个实体间的相互关联
- 联系集是相同类型联系的集合
- 联系集也可以有属性
联系集中实体的角色
- 实体在联系中扮演的功能称为实体的角色
- 角色是隐含的,通常不指定
- 当同样的实体集参与一个联系集多于一次,这类联系集称作是递归联系集
联系集的度
- 参与联系集的实体集的数目称为联系集的度
- 二元联系集:涉及两个实体集(度为2)、数据库系统中大多数联系集都是二元
属性
- 实体通过一组属性来表示,属性是实体集中每个成员所拥有的描述性性质
- 域—每个属性可取值的集合,也称值域
- 属性类型:
- 简单和复合属性
- 单值和多值属性
- 派生属性和基属性:派生属性可以从别的属性派生出来、派生属性值不存储,而是在需要时计算出来
复合属性
- 复合属性可以是有层次的
约束
映射基数约束
- 映射基数,或基数比率,表示一个实体通过一个联系集能关联的实体的个数
- 对二元联系集来说,映射基数必然是以下情况之一:一对一、一对多、多对一、多对多
- 二元联系集中的一个集合的某个元素可能并不映射到另一集合的任一元素
参与约束
- 如果实体集E中的每个实体都参与到联系集R的至少一个联系中,实体集E在联系集R中的参与称为全部的
- 如果实体集E中只有部分实体参与到R的联系中,实体集E在联系集R中的参与称为部分的
实体集的码
- 一个实体集的超码是一个或多个可以用来唯一标识实体的属性(集)
- 一个实体集的候选码是最小的超码
- 主码是被选择用来区分实体的候选码,主码只有一个,但候选码可以有多个
联系集的码
-
如果联系集R没有属性,那么属性集合 p r i m a r y − k e y ( E 1 ) ∪ p r i m a r y − k e y ( E 2 ) ∪ . . . ∪ p r i m a r y − k e y ( E n ) primary-key(E_1)\cup primary-key(E_2)\cup ... \cup primary-key(E_n) primary−key(E1)∪primary−key(E2)∪...∪primary−key(En)描述了集合R中的一个联系
-
如果联系集R有属性 a 1 , a 2 , . . . , a m a_1,a_2,...,a_m a1,a2,...,am,那么属性集合 p r i m a r y − k e y ( E 1 ) ∪ p r i m a r y − k e y ( E 2 ) ∪ . . . ∪ p r i m a r y − k e y ( E n ) ∪ { a 1 , a 2 , . . . , a m } primary-key(E_1)\cup primary-key(E_2)\cup ... \cup primary-key(E_n)\cup \{a_1,a_2,...,a_m\} primary−key(E1)∪primary−key(E2)∪...∪primary−key(En)∪{a1,a2,...,am}描述了集合R中的一个联系
-
相关的实体集的主码的集合形成了联系集的超码,在以上的两种情况下,属性集合 p r i m a r y − k e y ( E 1 ) ∪ p r i m a r y − k e y ( E 2 ) ∪ . . . ∪ p r i m a r y − k e y ( E n ) primary-key(E_1)\cup primary-key(E_2)\cup ... \cup primary-key(E_n) primary−key(E1)∪primary−key(E2)∪...∪primary−key(En)总是构成联系集的一个超码
冗余属性
- 假设有实体集:
- instructor实体集有dept_name属性
- department实体集
- 以及联系集:
- inst_dept,联系instructor和department
- instructor中的dept_name属性是冗余的,因为有一个明确的关系inst_dept来联系instructor和department:
- dept_name属性重复了inst_dept联系中的信息,应该从instructor中除去
实体-联系图
E-R图
- 矩形代表实体集
- 属性在实体矩阵中列出
- 构成主码的属性以下划线标明
- 菱形代表联系集
参与联系集中的实体集
- 全部参与(用两条线标识):实体集中的每个实体都参与到联系集的至少一个联系中
- 部分参与:某些实体不参与到联系集中的任何一个联系
基数约束
- 我们在联系集和实体集之间画一个箭头(
→
\rightarrow
→) 代表“一”,或者一条线段(—) 代表“多”来表示基数约束
角色
- 一个联系的实体集不需要唯一:一个实体集总的元素每次读出现在关系中代表一个“角色”
- course_id和prereq_id被称为角色
三元关系上的基数约束
- 我们只允许在一个三元(或三元以上)联系集外有一个箭头来表示基数约束
- 如果有多余一个的箭头,那就会有两种解释:
- 例如,R是A,B和C之间的三元联系集,并且有两个箭头指向B和C,这可以表示为:
- 每个在A中的实体都与来自B和C的至多一个实体相关联
- 每个来自(A,B)的实体对都与来自C的至多一个实体相关联,而每个来自(A,C)的实体对都与来自B的至多一个实体相关联
- 为了避免混淆,在联系集这外我们只允许有一个箭头
- 例如,R是A,B和C之间的三元联系集,并且有两个箭头指向B和C,这可以表示为:
弱实体集
-
一个没有足够的属性形成主码的实体集叫做弱实体集
-
弱实体集必须与标识或属主实体集(Owner Entity Set) 关联才有意义
-
将弱实体集与其表示实体集相连的联系称为标识性联系:标识联系集以双边框的菱形表示
-
弱实体集通过一个全部参与的、(多对一或一对一)的联系集与标识实体集联系
-
弱实体集的分辨符是使得我们区分弱实体集中实体的属性集合,也称为该弱实体集的部分码
-
弱实体集的主码由标识实体集的主码和该弱实体集的分辨符共同组成
-
弱实体集的分辨符用虚下划线表示
-
标识联系集以双边框的菱形表示
-
强实体集的主码并不存储于弱实体集
-
弱实体集可以参与标识性联系以外的任何联系,也可能与不止一个标识实体集关联文章来源:https://www.toymoban.com/news/detail-724988.html
-
在某些情况下,数据库设计者会选择讲一个弱实体集表示为属主实体集的一个 (多值)符合属性:文章来源地址https://www.toymoban.com/news/detail-724988.html
- 如果弱实体集只参与标识性联系,而且其属性不多,建模时更适合将其作为属性
- 反之,更适合将其表示为弱实体集
转换为关系模式
- 一个符合E-R模式的数据库可以表示为一些关系模式的集合:
- 实体集和联系集都可以用表示数据库内容的统一的关系模式来表示
- 每个实体集合联系集独有一个特有的关系模式与其对应,并分配相应的名字
- 每个关系模式都有一些列,每个列多有唯一的名字
具有简单属性的实体集的表示
- 从强实体集转换而来的模式与强实体集具有相同属性、主码
- 从弱实体集转换的模式包含弱实体集的属性和表示强实体集的主码
- 该模式的主码由强实体集的主码与弱实体集的分辨符组合而成
复合属性
- 复合属性通过为每个子属性创建单独的属性
- 实体集instructor有复合属性name:由first_name, middle_name和last_name构成
- 转化成关系模式后,该实体集具有name_first_name,name_middle_name和name_last_name
多值属性
- 实体集E的多值属性M用一个独立的模式EM表示
- 模式EM包含对应于的E主码及多值属性M的属性
- 多值属性的每个值映射到关系模式EM的每一个独立元组
- 不需要建立一个对应于实体集的模式,只需创建一个对应于多值属性的关系即可
联系集的表示
- 联系集关系模式属性的选择
- 联系集主码选择:二元联系集主码选择、多元联系集主码选择
- 注意:需要为联系集的属性建立外码约束
模式的冗余—合并
- 多对一和一对多的联系集的模式,如果“多”方参与是全部的,那么可以将 “多”方实体集和联系集的模式合并成单个包含两个模式所有属性并集的关系模式
- 合并后模式加入原联系集的外码约束
- 如果“多”方参与是部分的,也可以通过使用空值来进行模式合并。转换为关系模式时,联系集中 “一”方的相关属性应注意不能设置为not null
- 在一对一联系的情况下,联系集的关系模式可以跟参与联系的任何一个实体集的模式进行合并
- 一般而言,连接弱实体集与其标识强实体集之间的标识性联系集转换出的模式是冗余的
到了这里,关于数据库系统原理与实践 笔记 #6的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!