文章目录
- 第七章 数据库设计和E-R模型(重点!!!)
-
- ~~7.1 设计过程概览(了解)~~
-
- ==7.2 实体-联系模型(重点掌握)==
-
- 7.2.1 实体集
- 7.2.2 联系集
-
- 7.2.3 属性
-
- 7.3 约束
-
- 7.3.1 映射基数
- 7.3.2 参与约束
- 7.3.3 码
-
- 7.4 从实体集中删除冗余属性
- ==7.5 实体-联系图(重点!!!)==
-
- 7.5.1 基本结构
- 7.5.2 映射基数
- 7.5.3 复杂的属性
- 7.5.4 角色
- 7.5.5 非二元的联系集
- 7.5.6 弱实体集
- 7.5.7 大学的E-R图
- ==7.6 转换为关系模式(重点!!!)==
-
- 7.6.1 具有简单属性的强实体集表示
- 7.6.2 具有复杂属性的强实体集表示
- 7.6.3 弱实体集的表示
- 7.6.4 联系集的表示
- 7.7 实体-联系设计问题
-
- ~~7.8 拓展的E-R属性~~
- 第八章 关系数据库设计(重点!!!)
-
- 8.1 好的关系设计的特点
-
- 8.1.1 设计选择:更大的模式
- 8.1.2 设计选择:更小的模式
- 8.2 原子域和第一范式
- 8.3 使用函数依赖进行分解
-
- 8.3.1 码和函数依赖
-
- **非规范化设计的问题:数据冗余,插入/删除/更新异常**
- **函数依赖的概念(Functional Dependency)**
- 8.3.2 Boyce-Codd 范式(Boyce-Codd Normal Form, BCNF)
- 8.3.3 BCNF和保持依赖
- 8.3.4 第三范式
- ~~8.3.5 更高的范式(不考)~~
- 8.4 函数依赖理论
-
- 8.4.1 函数依赖集的闭包
- 8.4.2 属性集的闭包
- 8.4.3 正则覆盖
- 8.4.4 无损分解
- 8.4.5 保持依赖
- 8.5 分解算法
-
- 8.5.1 BCNF分解
- 8.5.2 3NF分解
- 8.5.3 3NF算法的正确性
- 8.5.4 BCNF和3NF的比较
- ~~8.6 使用多值依赖的分解(不考)~~
- ~~8.7 更多的范式(不考)~~
- ~~8.8 数据库设计过程(不考)~~
- ~~8.9 时态数据建模(不考)~~
- ~~9.10.11章不考~~
- 第12章 查询处理考到12.5
- 第14章 事务考到14.8
-
- 重装系统……备份数据时把这个文件夹抛弃了……且不可能重新整理
- 本文来源于能寻觅到的最后残骸
- 目录如下,待有缘人使用
- 文章不宜阅读and本系列文章止于此
第七章 数据库设计和E-R模型(重点!!!)
7.1 设计过程概览(了解)
7.1.1 设计阶段
7.1.2 设计选择
在软件开发中,需要经历这几个阶段
其中设计过程中需要进行数据库设计
关于E-R模式的引入
设计E-R模型的观点是,世界是由一组称为实体的基本对象和这些对象之间的联系构成的
E-R图的作用
帮助澄清用户数据需求,使分析人员和用户对数据需求达成高度一致
是数据逻辑模型设计的基础
7.2 实体-联系模型(重点掌握)
数据库可被建模为:实体集合和实体间联系。
7.2.1 实体集
- 实体是客观存在的对象并且与其他对象可区分,例如: 特定的人,公司,事件,植物,具有属性,例如:人具有姓名和地址,并且实体集是相同类型的实体的集合,他们具有相同的性质,例如:所有人的集合,所有公司的集合。
- 实体集的图例如下,以instructor(导师)为例:
实体用一个属性集合来表示,即实体集中所有成员都具有的描述性特性,域表示所有属性允许的值的集合。属性的种类有以下几种:
-
简单属性与复合属性
-
单值属性与多值属性
-
派生属性
- 可由其他属性计算得到
- 例,给定出生日期可计算出年龄
- 基属性或存储属性
-
复合属性的图例如下:
7.2.2 联系集
联系是指多个实体之间的联系,联系集是相同类型联系的集合。
- 例如导师和学生的关系,一个学生有一个导师,一个导师可以有多个学生,导师的id用s_ID表示,student的id用i_ID表示,导师和学生的联系可以用如下数据表表示:
advisor(s_ID,i_ID)
一般联系集存放的是两个表的主键,对应的图示如下:
- 联系集也可具有属性,例如导师和学生双选的日期,如下图所示:
联系集的度
联系集的度指的是参加联系的实体集的个数,涉及两个实体集的联系集称为二元的,联系集可以涉及多于两个的实体集,例:一个student在每个项目上最多只能有一位导师,如下图,包含三个实体集instructor、student和project(三元联系)(多于两个实体集之间的联系较少见,数据库系统中的联系集一般多为二元的)
7.2.3 属性
- 简单属性:不可再分的属性
- 复合属性:可以划分为更小的属性,如Birthday = year + month + day
- 单值属性:每个实体在该属性上的取值唯一
- 多值属性:每个实体在该属性上的取值可以有多个,比如一个教师可能有多个电话号码
- 派生属性:可以从其它相关属性或实体派生出来的属性,如教师(编号,姓名,出生日期,年龄),其中年龄即为派生属性,年龄可由当前年份-出生日期得到
各种属性在E-R图中的表示
7.3 约束
7.3.1 映射基数
二元联系集的映射基数有以下几种情况:
- 一对一,如:就任总统(总统,国家)
- 一对多,如:分班情况(班级,学生)
- 多对一,如:就医(病人,医生)
- 多对多,如:选课(学生,课程)
7.3.2 参与约束
7.3.3 码
键、码的概念
实体集的超码是能够唯一标识每个实体的一个或多个属性,候选码是实体集的最小超码,候选码可能存在多个,我们只会选择一个候选码作为主码或主键
-
例:instructor (ID,name,dept_name,salary
-
候选码:ID
-
超码:{ID},{ID, name},{ID,…}
7.4 从实体集中删除冗余属性
自主忽略~
7.5 实体-联系图(重点!!!)
E-R图(E-R diagram)可以图形化表示数据库的全局逻辑结构。E-R图既简单又清晰,这些是致使E-R模型广泛使用的重要性质。
7.5.1 基本结构
实体集之间不可以相连,必须通过联系集。
7.5.2 映射基数
在前面的7.3.1我们已经讨论过映射技术的四种形式,可以说任意二元联系都属于下面四种类型,现在我们用E-R图的形式表现出来。
7.5.3 复杂的属性
即上述简单-复合属性,单值-多值属性,派生属性等,见图7-11.
7.5.4 角色
7.5.5 非二元的联系集
7.5.6 弱实体集
如果一个实体的所有属性合在一起都不足以形成主码,则称这样的实体为弱实体,反之称为强实体。同一类型的弱实体形成弱实体集
依赖于其他实体集的实体集都叫做弱实体集,例如课程实体集(course)和开课学期实体集(section),所开课程需要依赖于课程实体集,因为没有课程,也就没有开课信息,如下图所示:
在E-R图中,弱实体集和强实体集有相似之处,但有两点主要的区别
- 弱实体集的分辨符以虚下划线标明,而不是实线
- 关联弱实体集与强实体集的联系集用双菱形表示
7.5.7 大学的E-R图
E-R图如下图所示,矩形代表实体集,有阴影的第一部分包含实体集的名字, 第二部分包含实体集中所有属性的名字,菱形代表联系集,未分割的矩形代表联系集的属性。构成主码的属性以下划线标明,线段将实体集连接到联系集:
参加联系的实体集不必是互不相同的
例,下图给出了course实体集和preq联系集之间的角色标识course_id和 prereq_id:
上图中course_id表示课程id,prereq_id表示学习某一个课程的前置课程。
在开发中一般我们使用二元联系,任何非二元联系都能转换成二元联系,例,将如下非二元联系schooling 转换成二元联系
特化用从特化实体指向另一方实体的空心箭头来表示。这种关系为ISA关 系,代表“is a”(“是一个”)。例如,一个教师“是一个”雇员:
7.6 转换为关系模式(重点!!!)
实体集和联系集都可以转化为关系模式,用以存储数据库中的内容。
若数据库符合E-R图,则可以表示成模式的集合。
在E-R图中,每个实体集和联系集均对应一个唯一的模式。
在每个模式中,均有多个列,且模式内列名不重复。
步骤:
1.转换强实体集; 2.转换弱实体集; 3.转换联系集(注意分情况讨论);
7.6.1 具有简单属性的强实体集表示
对于只有简单属性的强实体集,直接将E-R图转换为关系模式即可
7.6.2 具有复杂属性的强实体集表示
对于复合属性:将每个组合属性作为复合属性所在实体的属性
对于多值属性:将其转换为新的关系+所在实体的主码
复合属性全部拆开,多值属性建了一张新的表
7.6.3 弱实体集的表示
7.6.4 联系集的表示
7.7 实体-联系设计问题
设计数据库的步骤
7.8 拓展的E-R属性
第八章 关系数据库设计(重点!!!)
8.1 好的关系设计的特点
8.1.1 设计选择:更大的模式
8.1.2 设计选择:更小的模式
8.2 原子域和第一范式
如果一个域被认为是不可再分的单元,那么这个域是原子的
如果一个关系模式R的所有属性都是原子的,那么这个关系模式R属于第一范式(1NF)
注意要对这个原子性有正确的理解,具体的例子课本里有
8.3 使用函数依赖进行分解
首先明确,我们学习和使用函数依赖的目的是什么?
利用函数依赖,可以对现有关系进行分解,所以,函数依赖的本质作用是对现有的冗余的关系模式进行分解
关于后续相关符号的介绍
8.3.1 码和函数依赖
在现实世界中,数据通常存在各种约束,而满足所有这种约束的实例,被称为合法实例
现实世界中的约束可以转换为数据库中的码(超码,候选码,主码)
非规范化设计的问题:数据冗余,插入/删除/更新异常
- 数据冗余(想修改一个属性,就要更新多行数据)
- 插入异常(想要插入数据,结构因为表设计的问题,导致不能成功插入)
- 删除异常(只想删除其中的某些数据 ,结果把不该删的也删了)
- 更新异常(想更新一条数据,结果工作量大,还容易出错)
函数依赖的概念(Functional Dependency)
8.3.2 Boyce-Codd 范式(Boyce-Codd Normal Form, BCNF)
8.3.3 BCNF和保持依赖
8.3.4 第三范式
8.3.5 更高的范式(不考)
8.4 函数依赖理论
8.4.1 函数依赖集的闭包
8.4.2 属性集的闭包
8.4.3 正则覆盖
8.4.4 无损分解
8.4.5 保持依赖
8.5 分解算法
8.5.1 BCNF分解
8.5.2 3NF分解
8.5.3 3NF算法的正确性
8.5.4 BCNF和3NF的比较
8.6 使用多值依赖的分解(不考)
8.7 更多的范式(不考)
8.8 数据库设计过程(不考)
8.9 时态数据建模(不考)
9.10.11章不考
第12章 查询处理考到12.5
第14章 事务考到14.8
事务
事务(transaction)由查询和更新语句的序列组成。SQL标准规定当一条SQL语句被执行,就隐式地开始了一个事务。下列SQL语句之一会结束一个事务:
Commit work:提交当前事务,也就是将该事务所做的更新在数据库中持久保存。在事务被提交后,一个新的事务自动开始。
Rollback work:回滚当前事务,即撤销该事务中所有SQL语句对数据库的更新。这样,数据库就恢复到执行该事务第一条语句之前的状态
数据库系统概念笔记——第十四章:事务_设有两个事务t1和t2: t1从帐户a过户500元到帐户b t2从帐户a过户20%的余额到帐户b-CSDN博客
应试
方法:
- E是边集,边集由满足先I=read(Q)后J=write(Q),先I=write(Q)后J=read(Q),先I=write(Q)后J=write(Q) 这三个条件之一的所有Ti→Tj的边组成
- 若图无环,S是冲突可串行化的
- 等价的串行调度是,按有向边出口依次截取结点