数据库系统原理与设计复习笔记
由于临近考试,特做此篇笔记以便复习。读者大大请根据自己的学习内容来适当观阅。部分内容较为粗略,望原谅~
文章目录
第一章 数据库系统概论
1.数据库技术的产生与发展
- 人工管理阶段
- 文件系统阶段
- 数据库管理系统阶段
1.1 人工管理阶段
20世纪50年代中期以前的这段时间,计算机还很简陋,尚没有完整的操作系统,主要应用于科学计算。
数据是面向应用程序的,一个数据集只能对应于一个程序。
如上所示,它表示的是应用程序单对单的对数据进行处理的方式。
1.2 文件系统阶段
20世纪50年代后期到60年代中期的时间内,计算机除了应用于科学计算外,还有应用于数据管理。
如上图所示,对于一个特定的应用,数据被集中存放在多个数据文件中。针对该文件组开发特定的应用程序。
利用**“按文件名访问,按记录进行存取”**的管理技术,对文件进行删、改、查等操作
文件系统的特点:
- 文件系统实现了文件内的结构性。
- 整体上属于无结构的
文件系统的弊端:
- 数据共享性差,数据冗余和不一致。
- 数据独立性差
- 数据孤立,数据获取困难
- 完整性问题
- 原子性问题
- 并发访问异常
- 安全性问题
1.3 数据库管理系统阶段
- 数据库管理系统是由一个相互关联的数据的集合和一组用于访问、管理和控制这些数据的程序组成。
- DBMS是位于用户与操作系统之间的一层数据管理软件。
- DBMS和操作系统一样,都是计算机的基础软件。
设计数据库管理系统的目的在于有效地管理大量的数据,既涉及到数据存储结构的定义,又涉及到数据操作机制的提供。
数据库管理系统的基本特征(特点):
- 数据结构化
- 共享度高,冗余度低,易扩充
- 数据独立性高
2 数据模型的基本概念
数据库结构的基础是数据模型。
其中,数据模型是一个描述以下三方面的数学形式体系。
- 数据结构:数据结构是刻画数据、数据语义以及数据与数据之间的联系
- 数据操作:指的是对数据库中各种对象的实例允许执行的操作集合,包括操作及有关的操作规则
- 数据约束:是对数据结构和数据操作的一致性、完整性约束,也成为数据完整性约束
其中稍微以其中的模型——层次模型,来对数据模型的基本概念进行阅览
3 数据库的三级模式
根据数抽象的个不同的级别,DBMS也应该提供观察数据库的3个不同的角度。这就是数据库的三级模式结构
3.1 模式
模式被称为逻辑模式,它对应于逻辑层数据抽象
模式是数据库中全体收数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
模式的一个具体值成为模式的一个实例。
3.2 外模式
外模式也被称为子模式或者用户模式,它对应于视图层数据抽象。
外模式是数据库用户能够看到和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一具体应用有关的数据的逻辑表述。
外模式是保证数据库安全性的一个保障。因为每个用户只能看见和访问其所对应的外模式中的数据,其余的数据库内容均不可见。
3.3 内模式
内模式也被称为存储模式,它对应物理层数据抽象。
内模式是数据的物理结构和存储模式的描述,是数据在数据库内部的表示方式。
如上图所示,模式是对于公共而言的公共视图;外模式对应其应用,使得用户在进行应用A访问的同时,限制了其他应用的访问;而内模式对应存储结构,描述了数据库的存储结构等内部的表示方式。
4. 两层映像功能与数据独立性
数据库的两层映像功能与数据独立性
1.外模式/模式映像
- 简单来说,它定义了该外模式与模式之间的对应关系。
- 它对于一个外模式,数据库管理系统都有一个模式/外模式映像
- 它保证了数据与应用程序的逻辑独立性,简称为数据的逻辑独立性
2.模式/内模式映像
数据库中只有一个模式,也只有一个内模式,模式/内模式映像是唯一的,它定义了数据全局逻辑结构与存储结构之间的对应关系
在模式描述中定义模式/内模式映像
保证了数据与应用程序的物理独立性,简称为数据的物理独立性

在构建数据库的三级模式结构上,模式(全局逻辑结构)是数据库的核心和关系。它独立于数据库的其他层次。
所以,设计数据库模式结构中,应该首先确定数据库的逻辑模式。
第二章 关系模型与关系代数
1.关系完整性约束条件
实体完整性:
- 主码不能取
null
值。 - 其中,如果主码是由若干个属性的集合组成,则要求构成主码的每一个属性值不能取空值。
参照完整性:
若属性(或属性集)F是关系r的外码,它与关系s的主码Ks相对应,则对于关系r中的每一个元组在属性F上的取值要么为空值null
,要么等于关系s中某个元组的主码值。
用户自定义完整性:
首先,关系型数据库系统应该支持实体完整性和参照完整性。
其次,用户定义完整性就是针对某一个具体的应用要求来定义其约束条件。
2.关系数据结构
关系是一个二维表,对它的操作可以从水平(行)的角度进行,即选择操作;也可以从纵向(列)的角度进行,即投影操作。
给定一个查询需求,构造其关系代数表达式的步骤 :
- 明确该查询涉及到哪些属性;
- 明确该查询涉及到哪些关系;
- 根据数据库模式导航图,通过多对一联系(或一对多联系)把所有涉及的关系连接起来,每一个多对一联系(或一对多联系)都可以表示为外码属性的自然连接。
二维表的构成如下:
- 表头:关系模式、属性
- 表体:关系、元组
- 超码、候选码、主码、外码
3.关系代数
3.1 选择
选择操作做是在关系中查找满足给定的条件的所有元组。
例如如下图所示的实例,根据满足的内容来查询满足该条件下的所有元组。
3.2 投影
关系r上的投影是从r中选择出若干个属性列组成新的关系。
如上面举例的一样,它打印出来的是数据库中的属性。
3.3 并&差&交
--并运算
r∪s = { t∣t∈r∨t∈s }
--差运算(∈/表示不属于)
r-s = { t∣t∈r∧t∈/s }
--交运算
r∩s = { t∣t∈r∧t∈s }
3.4 笛卡尔积
两个分别为n目和m目的关系r和s的笛卡尔积是一个n+m目元组的集合。
若关系r有kr个元组,关系s有ks个元组,则关系r和s的笛卡尔积有kr×ks
个元组。
记作 :
r
×
s
=
t
r
⋅
t
s
∣
t
r
∈
r
∧
t
s
∈
s
r×s = { tr·ts∣tr∈r∧ts∈s }
r×s=tr⋅ts∣tr∈r∧ts∈s
3.5 连接
连接也称为θ连接。记为A op B,其中A、B分别为关系r和s中的属性个数相等且可比的连接属性集,op为比较运算符。 θ连接是从两个关系的笛卡尔积中选取连接属性间满足谓词θ的所有元组。
r
⋈
θ
s
=
t
r
⋅
t
s
∣
t
r
∈
r
∧
t
s
∈
s
∧
(
r
.
A
(
o
p
)
s
.
B
)
r ⋈θ s = { tr·ts∣tr∈r∧ts∈s∧(r.A (op) s.B) }
r⋈θs=tr⋅ts∣tr∈r∧ts∈s∧(r.A(op)s.B)
其中,连接有两个最常用、重要的连接。一个是等值连接,另一个是自然连接。接下来介绍一下自然连接。
自然连接
自然连接是一个特殊的等值连接,它要求两个参与连接的关系具有公共的属性集,并在这个公共属性集上进行等值连接;同时,还要求将连接结果中的重复属性列去除掉,即在公共属性集中的列只保留一次。
比如说,学生信息和成绩信息都具有学号属性,两个表就通过学号属性进行自然连接。
**【示例】**在数据库中,查找所有2016级的“蒙古族”学生的姓名,直接上答案!!
∏studentName(σnation='蒙古族'(Student) ⋈σgrade=2016(Class))
1.首先,对于上面的描述中可以根据MySQL嵌套查询的想法一样。先将想查询的元组查找出来。
σnation='蒙古族'(Student)
上面所找到的是“是蒙古族的学生”的元组。
σgrade=2016(Class)
上面找到的是具有**”年级是2016级的学生“**的元组。
2.其次将两个表进行连接,实际上就是对两个表进行笛卡尔积,最终得到拥有两个属性信息的表。
3.最后寻找满足如上条件(表中显示的名字)投影出来即可。
3.6 除运算
接下来用一个例子来比较直观的感受除运算的概念。
图中所示中,它将原本被除数中的表,根据除数中满足的信息筛选出来,得出商(结果)。
第三章节的部分可以移步到我的另外一篇博客(虽然被审核为转载…),但都是自己的一点一滴的学习中感受的存在。谢谢大家~
第四章 数据库建模
1.数据库设计过程
数据库过程就是根据各种应用处理要求、硬件环境及操作系统的特性,将现实世界中的数据进行合理组织,利用已有数据库来建立数据库系统的过程
具体地说,对于一个给定的应用环境,构造出最优的数据库逻辑模式和物理模式,并建立数据库及其应用系统,使之能够有效地存储和管理数据,满足用户的信息要求和处理要求。
如上图所示,数据库设计一共有如上6个步骤。后续的笔记中只限于对如上6个步骤的了解(除了概念设计)。
2.E-R模型基本概念及表示
2.1 实体与实体集
实体:实体是客观世界中可区分于其他事物的事物或者对象。
实体的特征:
- 独立存在
- 可区分于其他实体
实体可以是具体存在的、有形的事物,也可以是抽象的、无形的事物。
实体集:实体集是具有相同类型即相同性质的实体组成的集合。
2.2 属性
属性是实体集中每个实体具有的特征描述。比如学生实体就一定会有姓名这一个特征。
对于每个属性而言,一个实体都拥有自己的属性值。
对于每一个属性所允许的取值范围或者集合称为该属性的域。
其中,属性可以分为简单属性和复合属性;单值属性和多值属性。
-
简单属性:指的是不能再分为更小部分的属性。
-
复合属性:指的是可进一步分为更小部分的属性。
-
单值属性:指的是只有单独的一个值,比如一个学生只有一个学号。
-
多值属性:指的是有多个值,比如一个学生可以有多个电话。
-
派生属性:派生属性的值可以从其他相关属性或者实体派生出来,比如年龄可以间接的根据出生日期和当前日期计算得出。
2.3 联系与联系集
联系指的是多个实体间的相互关联。
联系集是同类联系的集合。
3.码约束与联系集的属性安置
- 超码:超码是一个或者多个属性的集合,且这些属性的集合在一个实体集中能够唯一标识一个实体。
- 其中,若一超码的任意真子集都不能成为超码,则称该最小超码为候选码。
- 给定一组属性集,可能存在多个候选码。比如假设学生实体集中不存在同名的学生,则学号和姓名都可以用来唯一区分学生 ,因此它们都可以作为学生实体集的候选码。
候选码和超码是实体集客观存在的特性,它们表示实体集中任意两个实体不允许在码属性上有相同的值。可以从多个候选码中选择一个作为实体集的主码。主
码是被数据库设计者主观选中、用来区分同一实体集中不同实体的候选码。
当一实体集存在多个候选码时,主码选择原则:
选择属性长度最短的候选码;
选择包含单个属性的码,而不是复合候选码;
选择在数据库系统生命周期内属性值最少变化的候选码;
选择在数据库系统生命周期内更可能包含唯一值的候选码。
一个联系集中的每一个联系也要求是可区分的,也必须存在候选码,并选择其中的一个候选码作为主码,用于唯一标识该联系集中的一个联系。
1. 二元联系集的主码选择,依赖于联系集的映射基数
一对一:主码可以使用参与联系集中的任何一方实体集的主码;
一对多(多对一):主码由“多”的一方实体集的主码组成;
多对多:主码由参与联系集中所有实体集的主码组成
2.二元联系集的属性安置
一对一联系集的属性:安置于联系集或任一边的实体集上;
一对多联系集的属性:安置于联系集或多的一方实体集上;
多对多联系集的属性:它是描述相关联实体集间的交互性语义,因此,联系属性只能安置于联系集上,不能放到相关联的实体集上去
第五章 关系数据理论与模式求精
5.1 数据库“好”的模式
- 数据冗余尽可能少(即数据共享尽可能高)
- 不发生插入异常、删除异常、更新异常等问题。
- 模式分解时,分解后的模式应具有无损连接、 保持依赖等特性
5.2 有损分解与无损分解
有损分解:两个分解后的关系通过连接运算还原得到的信息与原来关系的信息不一致。
无损分解:通过连接分解后所得到的较小关系完全还原被分解关系的所有实例,称之为无损分解。
依赖保持:如果酶分解关系模式上的所有依赖关系都在分解得到的关系模式上保留,称该分解为依赖保持。
5.3 函数依赖关系
函数依赖(functional dependency, 简称FD)是一种完整性约束, 是现实世界事物属性之间的一种制约关系。
如上图所示,对于任意两个在属性集{A, B}上取值相同的元组,它们在属性C上的取值也相同。因此,满足函数依赖AB->C
5.4 平凡与非平凡函数依赖
在关系模式r®中,a和b是R的子集.若a依赖于b,但b不属于a,则称a->b是非平凡函数依赖。否则,若b属于a, 则称a->b是平凡函数依赖。
5.5 完全函数依赖和部分函数依赖
在关系模式r®中,a属于R的子集,b属于R的子集,且a->b是非平凡函数依赖。若对任意的c是a的子集,c->b都不成立,则称a->b是完全函数依赖,简称完全
依赖。否则,若存在非空的c属于a,使c->b成立,则称a->b是部分函数依赖,简称部分依赖。
5.6 传递函数依赖
在关系模式r®中,设a是R子集,b是R子集,c是R子集,若a->b,b->c,则必存在函数依赖a->c;若a->b 、b->c和a->c都是非平凡函数依赖,且b不依赖a,则称a->c是传递函数依赖,简称传递依赖。
5.7 范式
满足BCNF范式的关系一定满足3NF范式,满足3NF范式的关系一定满足2NF范式,满足2NF范式的关系一定满足1NF范式。
如果一个属性的域值不可再分,称关系模式为第一范式。
如果一个关系模式r®属于1NF,且所有非主属性都完全函数依赖于r®的候选码,则称r®属于第二范式
如果一个关系模式r®属于2NF,且所有非主属性都直接函数依赖于r®的候选码(即不存在非主属性传递依赖于候选码,也就是不存在非主属性依赖于另一个非主属性),则称r®属于第三范式,
最后的BCNF范式满足以下三个条件:
所有非主属性都完全函数依赖于每个候选码;
所有主属性都完全函数依赖于每个不包含它的候选码;
没有任何属性完全函数依赖于非候选码的任何一组属性。
--它排除了:
任何属性(包括主属性和非主属性)对候选码的部分依赖和传递依赖;
主属性之间的传递依赖。
5.8 逻辑蕴涵&闭包
-
若给定函数依赖集F,可以证明其他函数依赖也成立,则称这些函数依赖被F逻辑蕴涵。令F为一函数依赖集,F逻辑蕴涵的所有函数依赖组成的集合称为F的闭包,记为F+
-
令r®为关系模式,F为函数依赖集,AR,则称在函数依赖集F下由A函数确定的所有属性的集合为函数依赖集F下属性集A的闭包,记为A+
如上图所示,已计算出(AG)+=ABCGHI,则还要进一步分别计算A+和G+。最后经计算得,A+=ABCH、G+=G,它们都不包含R的所有属性。因此,AG为r®的候选码
第七章 SQL定义、更新、编程
1.SQL数据更新语言
结构化查询语言SQL包括:数据定义语言DDL、数据操纵易语言DML、数据控制语言DCL和其他。
数据操纵语言DML是对数据库的数据进行检索和更新。其中包括以下三条语句。INSERT
、DELETE
、UPDATE
。
另外的,还有其他的分类:
- 数据控制DCL:授权
- 数据操纵DML:更新(增删改);查询select
2. 插入数据
插入一个元组:
INSERT INTO <tableName> [ (<columnName1> [, <columnName2> ... ] ) ]
VALUES (<value1> [, <value2> ... ] )
--例子:将一个新学生元组('0700006', '李相东', '男', '1991-10-21 00:00', '云南', '撒呢族', 'CS0701')插入到学生表Student中。
INSERT INTO Student
VALUES ( '0700006', '李相东', '男', '1991-10-21 00:00', '云南', '撒呢族', 'CS0701' )
--例子:将一个新学生元组(姓名:章李立,出生日期:1991-10-12 00:00,学号:1500007)插入到学生表Student中。
INSERT INTO Student(studentName, birthday, studentNo)
VALUES ( '章李立', '1991-10-12 00:00', '0700007' )
注意:
- 按照指定属性的顺序和属性的个数向学生表Student插入一个新元组,没有列出的属性列自动取空值NULL或默认值;
- 插入新元组时,数据的组织可不按照基本表结构定义的属性个数和顺序进行插入。
插入多个元组:
INSERT INTO <tableName> [ ( <columnName1> [, <columnName2> ... ] ) ]
<subquery>
<tableName>
:要插入元组的基本表的名称;
<columnName1> [, <columnName2> ... ]
:指明被插入的元组按 <columnName1>
, <columnName2>
, … 指定的属性名称和顺序插入到基本表<tableName>
中;
该项可以省略,若省略则其查询出来的结果必须与<tableName>
表结构相同;
<subquery>
:由SELECT
语句引出的一个子查询。
3. 删除数据
DELETE FROM <tableName> [WHERE <predicate>]
<tableName>:要删除记录的基本表的名称;
[WHERE <predicate>]:指出被删除的元组所满足的条件.该项可以省略,若省略则表示删除表中的所有元组;
WHERE子句中可以包含子查询。
--例子:删除学号为1600001同学的选课记录。
DELETE FROM Score
WHERE studentNo='1600001'
4. 修改数据
UPDATE <tableName>
SET <columnName1> = <expr1> [, <columnName2> = <expr2> ... ]
[FROM {<tableName1> | <queryName1> | <viewName1>} [AS] [<aliasName1>]
[, {<tableName2> | <queryName2> | <viewName2>} [AS] [<aliasName2>] ... ]
[WHERE <predicate>]
其中:
<tableName>:要进行修改数据的基本表的名称。
SET <columnName1> = <expr1> [, <columnName2> = <expr2> ... ]: 用表达式的值替代属性列的值
一次可以修改元组的多个属性列,之间以逗号分隔。
[WHERE <predicate>]:指出被修改的元组所满足的条件
该项可以省略,若省略,表示修改基本表中的所有元组;
WHERE子句中可以包含子查询。
5.视图
- 视图是虚表,是从一个或几个基本表(或视图)中导出的表。
- 在数据字典(数据库系统表)中仅存放视图的定义,不存放视图对应的数据。
- 当基本表中的数据发生变化时,从视图中查询出的数据也随之改变。
- 视图实现了数据库管理系统三级模式中的外模式。
基于视图的操作包括:
- 查询、删除、受限更新和创建基于该视图的新视图。
视图的主要作用是:
- 简化用户的操作;
- 使用户能以多种角度看待同一数据库模式;
- 对重构数据库模式提供了一定程度的逻辑独立性;
- 能够对数据库中的机密数据提供一定程度的安全保护;
- 适当的利用视图可以更清晰的表达查询。
第八章 数据库存储结构与查询处理
1.索引与散列
顺序索引(ordered index):索引中的记录(索引项)基于搜索码值顺序排列。
散列索引:索引中的记录(索引项)基于搜索码值的散列函数(即哈希函数)的值平均、随机地分布到若干个散列桶中。
组织结构:在索引中按搜索码值的顺序存储索引项,并将索引项与包含该索引项中搜索码值的文件记录关联起来(通过指针).
如下图所示:
对于索引顺序文件而言,顺序索引有两类:稠密索引和稀疏索引。
-
即使采用稀疏顺序索引,对于一个大型数据库而言,顺序索引本身也可能变得很大。
-
如果索引过大,主存中不可能读入所有的索引块,也就是大部分索引块只能存储在磁盘上,这样在查询处理过程中,搜索索引就必须读大量的磁盘块。
-
通过多级索引技术能够较好地解决上述问题。所谓多级索引就是在索引之上再建立索引。
另外的,辅助索引通过使用指针桶的方式实现。将数据文件中具有该搜索码值的所有记录的指针存放在一个指针桶中。索引项中的指针会存放指向指针桶的指针。
B+树索引
B+树索引的结构满足:
- B+树索引是一个多级索引,但其结构不同于多级顺序索引
- B+树索引采用平衡树结构,即每个叶结点到根结点的路径长度相同
对于一个表的索引而言,不是越多越好,因为会降低写的效率 。
2.游标
对SELECT语句的结果集进行逐行处理,需使用游标。
**游标(cursor)**是系统为用户开设的一个数据缓冲区,用于存放SQL语句的执行结果(元组集合)。每个游标都有一个名字,用户可以用SQL提供的语句从游标中逐一获取元组(记录),并赋给主变量,交由主语言进一步处理。
3.存储过程
- 存储过程是为了完成特定功能汇集而成的一组命名了的SQL语句集合
- 该集合编译后存放在数据库中,可根据实际情况重新编译;
- 存储过程可直接在服务器端运行,也可在客户端远程调用运行,远程调用时存储过程还是在服务器端运行
4.触发器
用户定义在关系表上的一类由事件驱动的存储过程,由服务器自动激活。
5.查询优化
查询处理过程:语法分析与翻译、查询优化、查询执行
查询优化:
- 处理一个给定的查询,尤其是复杂的查询,通常会有许多种执行策略。
- 查询优化(query optimization)就是从这许多策略中找出最有效的查询执行计划的处理过程。
- 期望RDBMS能够构造并选择出一个具有最小查询执行代价的查询执行计划
第九章 数据库安全性与完整性
数据库的安全性:保护数据库以防止不合法使用所造成的数据泄密、更改或破坏
数据库的完整性:防止数据库中存在不符合语义的数据,其防范对象是不合语义的、不正确的数据
授权用户才能访问数据库
安全:
权限管理:GRANT
和REVOKE
GRANT select ON Score TO u1, u2, u3
REVOKE select ON Score FROM u1
第十章 事务管理与恢复
1.事务
- 事务是一个读写操作序列。这些操作是一个不可分割的逻辑工作单元,要么都做,要么都不做
- 事务提交(commit):将成功完成事务的执行结果(即更新)永久化,并释放事务占有的全部资源。
- 事务回滚(rollback):中止当前事务、撤销其对数据库所做的更新,并释放事务占有的全部资源
事务特性:
1)原子性:事务的所有操作要么全部都被执行,要么都不被执行
2)持久性:一个事务成功提交后,它对数据库的改变必须是永久的,即使随后系统出现故障也不会受到影响
3)一致性:一个单独执行的事务应保证其执行结果的一致性,即总是将数据库从一个一致性状态转化到另一个一致性状态
4)隔离性:当多个事务并发执行时,一个事务的执行不能影响另一个事务,即并发执行的各个事务不能互相干扰
并发控制:数据库的一致性经常会受到破坏,因此在事务访问数据对象前须采取一定措施加以控制,只有得到访问许可时,才能访问数据对象,如基于封锁的并发控制方法