数据库理论
第一章 概述
概念
- 数据(Data)
- 数据是数据库中存储的基本对象。
- 数据的含义称为语义,数据与其语义是不可分的
- 数据库(DB)
- 特性:永久存储、有组织、可共享、易扩展、冗余度小
- 数据库管理系统(DBMS)
- 位于用户和操作系统之间
- 提供三种语言
- 数据定义语言(DDL):定义、删除、修改数据库中的对象
- 数据操纵语言(DML):增删改查
- 数据控制语言(DCL):用于控制用户对数据库操纵的权限
- 数据库系统(DataBase System,DBS)
- 由数据库(DB),数据库管理系统(DBMS),应用程序和数据库管理员(DBA)组成的存储、管理、处理和维护数据的系统。
技术发展的三个阶段
- 人工管理阶段
- 计算机系统不提供对用户数据的管理功能
- 数据不能共享
- 不保存数据
- 文件系统阶段
- 数据以“文件”形式可长期保存在外部存储器的磁盘上
- 数据冗余、不一致性、数据独立性差
- 数据库系统阶段
- 数据结构化
- 数据共享性高
- 冗余少
- 易扩充
- 独立性高
- 数据由DBMS统一管理控制
数据模型
-
组成
- 由数据结构、数据操作和完整性约束三个部分组成
-
分类
-
逻辑模型和物理模型
-
层次模型(树形结构)
- 只有一个结点没有双亲结点(根节点)
- 其他结点只有一个双亲结点
-
网状模型
- 允许一个以上的结点无双亲
- 一个结点可以有多于一个的双亲
-
关系模型
-
-
概念模型(E-R图)
- 实体用矩形,属性用椭圆,关系用菱形
-
三级结构模式
-
模式
- 只有一个
- 模式结构的中间层
- 与数据存储模式、硬件、应用程序、开发工具、设计语言无关
-
外模式
- 多个
- 数据库用户使用的局部数据的逻辑结构和特征
- 保证数据库安全性
-
内模式
- 一个
- 是数据物理结构和存储方式的描述
- 是数据在数据库内部的表示方式
第二章 关系代数
关系
- 单一的数据结构----关系
- 现实世界的实体以及实体间的各种联系均用关系来表示
- 逻辑结构----二维表
- 从用户角度,关系模型中数据的逻辑结构是一张二维表
- 建立在集合代数的基础上
-
域
- 域是一组具有相同数据类型的值的集合,例如整数、自然数都是域
-
笛卡尔积
- 笛卡尔积是域上面的一种集合运算。
- 笛卡尔积可表示为一个二维表,表中每行对应一个元组,表中每一列的值来自一个域
- 元组
- 笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组,简称元组
- 分量
- 笛卡尔积元素(d1,d2,…,dn)中的每一个值di叫作一个分量
-
关系
- 是笛卡尔积的一个子集,也是一个二维表
- 特殊名词
- 候选码:某一属性唯一标识一个元组
- 主码:候选码中的一个
- 全码:全部属性都是候选码
- 主属性:候选码的主属性
- 泛式:关系满足一定的规范
三类关系
-
基本关系(基本表)
- 实际存在的表,是实际存储数据的逻辑表示
-
查询表
- 查询结果对应的表
-
是图标
- 虚表
-
三类完整性约束
- 实体完整性
- 主属性非空
- 参照完整性
- 外键属性要么为空要么为关联表的值
- 用户定义完整性
- 用户自定义约束规则
- 实体完整性
关系代数
第三章 数据完整性
定义
- 数据的正确性和相容性
- 完整性和安全性是两个不同概念
DBMS需要做到
- 提供定义完整性约束条件的机制
- 提供完整性检查的方法
- 违约处理
三种完整性
-
实体完整性
-
参照完整性
-
用户定义完整性
建立约束
![image-20220102165619570](https://gitee.com/yoooooga/img/raw/master/img/image-20220102165619570.png)
触发器Trigger
-
定义触发器
![image-20220102170009697](https://gitee.com/yoooooga/img/raw/master/img/image-20220102170009697.png)
-
触发器的删除
第四章 SQL
SQL特点
- 集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)功能于一体
- 可以独立完成数据库生命周期中的全部活动
- 用户数据库投入运行后,可根据需要随时逐步修改模式,不影响数据的运行。
- 数据操作符统一
索引
- 建立索引是为了加快查询速度
- 属于内模式范畴
- 常见的索引
- 顺序索引
- 记录顺序与逻辑顺序一致
- B+树索引
- 非叶子结点只包含导航信息,不包含实际值
- 所有的叶子节点和相连的节点使用链表相连
- HASH索引
- 顺序索引
数据查询
- 一般查询
![image-20220102153300404](https://gitee.com/yoooooga/img/raw/master/img/image-20220102153300404.png)
-
消除重复值 DISTINCT
-
使用列别名
-
确定范围 BETWEEN AND
-
确定集合 IN / NOT IN
-
字符匹配 LIKE
- _ 等价于?
- % 等价于*
-
转义字符
-
空值
-
查询结果排序 ORDER BY
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JFOCfriX-1641125881598)(C:/Users/25383/AppData/Roaming/Typora/typora-user-images/image-20220102154656325.png)]
- NULL值算最大,即升序在最后,逆序在最前
-
聚集函数
-
GROUP BY
-
EXISTS
-
ANY / ALL
-
集合查询
- UNION 并集
- INTERSECT 交集
- EXCEPT 差集
-
数据更新
-
插入INSERT
-
修改UPDATE
-
删除DELETE
-
视图
-
虚表,是从一个或几个基本表(或视图)导出的表
-
只存放视图的定义,不存放视图对应的数据
-
基表中的数据发生变化,从视图中查询出的数据也随之改变
-
视图的定义、查询、更新
-
建立
-
删除
-
其他操作和数据表一样
-
-
作用
- 简化用户操作
- 保护机密数据
- 更加清晰表达重要信息
- 使用户多角度看待统一数据
第五章概念逻辑模型
E-R图
- 组成要素
- 实体(方框表示)
- 属性(椭圆表示)
- 主属性下加下划线
- 联系(菱形表示)
- 一对一、一对多、多对多
- 链接实体端写1,n,m
第六章 关系规范化
函数依赖
-
定义
设R(U)是属性集U上的关系模式,X和Y是U的子集。
对于R(U)的任意关系的任意元组t1, t2,如果t1[Y]≠t2[Y],成立t1[X]≠t2[X](即:不存在t1, t2,使得t1[X]=t2[X],而t1[Y]≠t2[Y])。
则称 X函数确定Y(即:X→Y)或Y函数依赖于X。
- 平凡函数依赖
- 如果X→Y,且Y
X,则称X→Y是平凡函数依赖
- 如果X→Y,且Y
- 非平凡函数依赖
- 如果X→Y,但Y
X,则称X→Y是非平凡函数依赖
- 如果X→Y,但Y
- 完全函数依赖
- Y不函数依赖于X的任意真子集,只依赖于X本身
- 部分函数依赖
- 非完全函数依赖
- 平凡函数依赖
-
表示法
范式NF
-
1NF
-
R(U,F)的所有属性都是不可再分的最小数据项,则称R满足1NF
-
关系数据库系统必须满足1NF
-
-
2NF
-
R(U,F)∈1NF,并且R的每一个非主属性都完全函数依赖于R的候选键
-
分解为每个候选键一个块
-
-
3NF
-
R(U,F)∈2NF,且R的每个非主属性都不传递函数依赖于R的候选键
-
3NF分解
-
分解结果
-
-
-
函数依赖集闭包
-
属性集闭包
-
最小函数依赖集
-
关系模式分解
- 保连接分解
- 保依赖分解
- 分解算法
第七章 数据库安全性
名词解析
- 数据库管理员:拥有所有对象的所有权限,可授予权限给用户
- 用户:拥有自己建立的对象的所有权限,可授予权限给其他用户
- 角色:数据库角色是权限的集合
- 审计:记录用户对数据库的操作记录
存取控制
- 包含两部分
- 定义用户权限
- 合法权限检查
- 两种模式
- 自主存取控制(DAC)
- 对象和权限间关系十分灵活
- 使用GRANT和REVOKE来实现
- 强制存取控制(MAC)
- 对于权限的管理很严格
- 安全性高
- 自主存取控制(DAC)
权限赋予回收
- 权限赋予GRANT,权限收回REVOKE
![image-20220102163329554](https://gitee.com/yoooooga/img/raw/master/img/image-20220102163329554.png)
![image-20220102163559884](https://gitee.com/yoooooga/img/raw/master/img/image-20220102163559884.png)
第八章 数据并发
事务
-
不可拆分,最小的工作单位
-
特性
-
原子性:要么不做要么全做
-
一致性:事务的执行结果使数据始终保持一致
-
隔离性:在事务执行期间,并发事务之间互不影响
-
持续新:事务一旦成功提交,则事务对数据库的更新永久生效
-
出现的不一致性的问题
- 丢失修改:AB同时修改一个数据,有一个人修改失败
- 读脏数据:A修改了数据,B读取了修改后的数据,A将修改撤销,B的数据就是脏数据
- 不可读重复:A读完数据一次后B将其修改,A第二次读取的数据和之前不一样
封锁
- 为解决数据不一致的问题,如互斥锁
- 封锁粒度
- 粒度越大,封锁对象越少
- 粒度越小,封锁对象越多
封锁协议
-
一级封锁协议
-
加X锁
-
解决丢失修改
-
-
二级封锁协议
-
加S锁,读取结束释放
-
解决丢失修改和读脏数据
-
-
三级封锁协议
-
加S锁,事务结束释放
-
解决丢失修改、读脏数据和不可重读
-
-
两端封锁协议(2PL)
- 区分加锁阶段和解锁阶段
- 每个阶段只能干一种事情
- 若遵守三级封锁协议,则一定遵守两段锁协议
- 2PL为并发事务的可串行化,提供了理论保证
活锁和死锁
- 活锁:事务可能永远等待(系统总是先批准其他事务的锁请求)
- 采用FCFS等调度策略
- 死锁:两个事务互相申请对方锁住的资源导致两个事务永远不能结束
- 预防死锁
- 一次性封锁法:一次锁住需要的所有事务
- 顺序封锁法:预先对数据对象规定一个封锁顺序
- 死锁诊断与解除
- 超时法:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁
- 等待图法:并发控制子系统周期性地生成事务等待图,并进行检测,如果发现图中存在回路,则发生了死锁
- 预防死锁
第九章 数据恢复
故障管理
- 事务故障
- 事务还没运行完遭到强行终止
- 系统故障
- 系统停止运转
- CPU故障,系统断电
- 介质故障
- 外存储设备故障
- 磁盘损坏,强磁场干扰
- 病毒故障
- 计算机病毒
恢复的实现技术及策略
- 数据转储
- 静态转储:正在运行的事务全部停止才能进行
- 动态转储:可以并发
- 海量转储:储存全部数据
- 增量转储:只储存更新的数据
- 日志文件
- 用于事务故障和系统故障的恢复
- 动态转储要日志文件
- 严格按照并发事务执行的时间次序依次登记。
- 必须险些日志文件,后进数据库
恢复策略
- REDO:重做
- 正向扫描日志文件,对每个REDO事务重新执行日志文件登记的操作
- UNDO:撤销
- 反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作
- COMMIT:提交
- 正常结束
- ROLLBACK:回滚
- 撤销与完成的所有操作,回滚到最开始的状态
恢复技术
- 事务故障恢复方法
- 一直执行撤销UNDO
- 通常由DBMS的恢复子系统自动完成
- 系统故障恢复
- 撤销未完成事务(UNDO)和重做已完成事务(REDO)
- 通常由DBMS的恢复子系统自动完成
- 介质故障的恢复
- 重装数据库,重做已完成事务
- 数据镜像
- 备份数据库
第十章 数据库设计
数据库设计的六个阶段
-
需求分析
- 准确了解和分析用户需求(包括数据和处理)
-
概念结构设计
- 通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型
-
逻辑结构设计
- 将概念结构转换为某个DBMS所支持的数据模型,并对其进行优化
-
物理结构设计
- 为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)
-
数据库实施
- 根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库并试运行
-
数据库运行和维护
- 在数据库投入正式使用后不断地对其进行评价、调整与修改
技术
- 事务故障恢复方法
- 一直执行撤销UNDO
- 通常由DBMS的恢复子系统自动完成
- 系统故障恢复
- 撤销未完成事务(UNDO)和重做已完成事务(REDO)
- 通常由DBMS的恢复子系统自动完成
- 介质故障的恢复
- 重装数据库,重做已完成事务
- 数据镜像
- 备份数据库
第十章 数据库设计
数据库设计的六个阶段
-
需求分析
- 准确了解和分析用户需求(包括数据和处理)
-
概念结构设计
- 通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型
-
逻辑结构设计
- 将概念结构转换为某个DBMS所支持的数据模型,并对其进行优化
-
物理结构设计
- 为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)
-
数据库实施
- 根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库并试运行
-
数据库运行和维护
- 在数据库投入正式使用后不断地对其进行评价、调整与修改