数据库系统概论
第一章 绪论
- 数据:对现实世界中客观事物的符号表示(描述事物的符号记录)
- 数据处理技术的发展:
- 人工管理阶段:
数据不保存;应用程序管理数据;不共享、冗余;数据与程序不具有独立性 - 文件系统阶段:
数据长期保存;共享性差;数据与程序有一定的独立性 - 数据库系统阶段:
数据有整体的结构性,面向全组织,面向现实世界;由DBMS统一存取;数据共享性好;数据与程序完全相互独立 - 高级数据库系统阶段:
分布式数据库系统;面向对象数据库系统
- 人工管理阶段:
- 数据库(DB):长期存储在计算机内有组织可共享的大量数据的集合
- 数据库管理系统(DBMS):
- 介于用户与操作系统之间的一层数据管理软件。
- 功能:数据定义,数据组织、存储和管理,数据操纵,数据库的事务管理和运行管理,数据库的建立和维护功能。
- 数据库系统(DBS)= 数据库(DB)+数据库管理系统(DBMS)
- 数据模型:
- 是对现实世界数据特征的抽象
- 三要素:数据结构、数据操纵、完整性约束
- 典型:层次模型、网状模型、关系模型
- 概念模型(E-R图):
- 三级模式结构:
- 外模式:关于用户数据的局部逻辑结构和特征的描述,是模式的逻辑子集。
- 模式(概念模式):数据库全体数据的全局逻辑结构和特征的描述。
- 内模式:是数据库数据的物理结构和存储结构的描述。
- 两级映像:
- 外模式/模式映像:保证了数据与程序的逻辑独立性
- 模式/内模式映像 :保证了数据与程序的物理独立性
- 数据库系统结构:单用户结构、主从结构、分布式结构、C/S结构、B/S结构
第二章 关系数据库
- 关系的数学定义
- 域:具有相同数据类型的值的集合
- 笛卡尔积:
- D1 = 导师 = {张清玫,刘逸};
D2 = 专业 = {计算机科学与技术,信息管理与信息系统};
D3 = 研究生 = {李勇,刘晨,王敏} - 笛卡尔积基数为2×2×3 = 12,也就是说D1×D2×D3共有12个元组,这12个元组可列成一张二维表。
- D1 = 导师 = {张清玫,刘逸};
- 关系(二维表):
- 基本关系
- 查询结果
- 视图
- 候选码:能唯一标识一个元组的属性组
- 主码(码):多个候选码中的一个
- 外码:关系R的某一属性组X不是R的码,但是其他某一关系的码,称X为R的外码
- 主属性:组成候选码的属性
- 关系模式:
对关系的描述。
Student(Sno ,Sname,Sage,Sdept) - 关系是关系模式的值——是动态的,
关系模式是型——是静态的
- 关系的完整性:
- 实体完整性:主属性不能取空值
- 参照完整性:外码所取的值,要么空值,要么是在它当主码的元组中取得到的值
- 用户定义的完整性:某一具体应用所涉及的数据必须满足的语义要求,由应用环境决定。
如:属性的非空限制,属性的取值范围
- 关系数据语言:
- 关系代数
- 关系演算
- 结构化查询语言SQL
- 关系代数语言:(重点掌握运算)
按“运算符”不同- 集合:
- 并 ∪
- 交 ∩
- 差 –
- 笛卡尔积 ×
- 关系:
- 选择
- 投影
- 连接
- 除运算
- 集合:
- 关系演算语言
第三章 关系数据库标准语言SQL语言
- SQL概述
- SQL特点:
- 高度非过程化
- 面向集合
- SQL语言功能:
- 数据定义:create,drop,alter
- 数据查询:select
- 数据操纵:insert,update,delete
- 数据控制:grant,revoke
- SQL特点:
- 数据定义
- 表/模式
- 一个基本表属于一个模式,一个模式有多个基本表
- create
- alter
- drop
- 索引
- 表/模式
- 数据查询(课本例题多练)
- 单表:
- select
- order by
- 聚集 group by【where和聚集函数不能同时使用】
- 连接
- 等值连接
- 外连接
- 自然连接
- 嵌套
- in
- all
- any
- exist
- 集合
- 并 union
- 交 intersect
- 差 except
- 单表:
- 数据更新
- insert
- update
- delete
- 空值的处理
- 视图——外模式
模式——基本表
内模式——存储文件
第四章 关系数据理论
- 规范化(范式的模式分解)
- 函数依赖:X函数确定Y,Y函数依赖于X:X→Y
以SC(Sno,Cno,Grade)举例- 平凡函数依赖:(Sno,Cno)→Sno 或(Sno,Cno)→Cno【
平凡函数依赖就是废话】 - 非平凡函数依赖:(Sno,Cno)→Grade
- 完全函数依赖F:(Sno,Cno)→Grade
- 部分函数依赖P:(Sno,Cno)→Sno 或(Sno,Cno)→Cno
【如果是单一的一个属性是码,那么就没有完全/部分函数依赖这个说法了】 - 传递函数依赖:
Std(Sno,Sdept,Mname),Sno→Sdept,Sdept→Mname,那么Mname传递函数依赖于Sno
反例:没有重名的情况下(Sno,Sname,Sdept)其中Sno←→Sname,那么Sdept直接依赖于Sno,就不可以说“传递函数依赖”
- 平凡函数依赖:(Sno,Cno)→Sno 或(Sno,Cno)→Cno【
- 码:
- 候选码:K是R中的属性或属性组,U完全函数依赖于K,则K是R的候选码
- 超码:K是R中的属性或属性组,U部分函数依赖于K,则K是R的超码
- 全码(All-key):整个属性组是码
- 主属性:包含在任何一个候选码中的属性
- 非主属性:不包含在任何码中的属性
- 候选码的超集(如果存在)一定是超码,候选码的任何真子集一定不是超码
- 候选码中选一个为主码,包含在候选码中的属性为主属性,其余为非主属性
- 范式
- 1NF:横平竖直的表就是1NF,不能表中有表、大表套小表、表必须是原子的(每一个分格都是不可再分的数据项)
- 2NF:R∈1NF,不存在部分函数依赖
- 3NF:R∈2NF, 不存在传递函数依赖
- BCNF:主属性、非主属性都完全依赖于码,且不传递依赖于码——每一个决定属性集都包含候选码
- 函数依赖:X函数确定Y,Y函数依赖于X:X→Y
例题:
关系模式S-L-C(Sno,Cno,Sdept,Sloc,Grade),Sloc表示宿舍,每个系住的宿舍相同
分析: (Sno,Cno)→Grade, (Sno,Cno)→Sdept,Sno→Sdept,存在部分函数依赖,不属于2NF
(Sno,Cno)→Sloc,Sno→Sloc,存在部分函数依赖,不属于2NF
规范化为2NF(拆表):谁跟你好,复制自己,把他带走
SC(Sno,Cno,Grade)S-L(Sno,Sdept,Sloc)
规范为3NF:
SC(Sno,Cno,Grade)S-D(Sno,Sdept),D-L(Sdept,Sloc)
- 范式做题技巧:
- 找码,分清主属性、非主属性
- 写主属性、非主属性的决定关系
- 写主属性、非主属性内部的函数依赖
- 拆
-
多值依赖:一个X对应多个Y
- 【解析】1NF/2NF/3NF/BCNF ∈ 函数依赖;4NF/5NF ∈ 多值依赖
- BCNF到4NF:消除非平凡且非函数依赖
-
数据依赖的公理系统
- Armstrong公理系统:
自反律:U=(sno,cno,grade)x = sno,cno,y = sno
增广律:U=(sno,cno,grade)x = sno,cno,grade,y = sno,grade
传递律:
合并规则:X→Y,X→Z,有X→YZ
伪传递规则:X→Y,WY→Z,有XW→Z
分解规则:X→Y及Z⊆Y,有X→Z - 闭包F+: 【写了的+没写的】
U={ABCDE}
F={A→B,B→C,D→E}
闭包F+ ={A→B,B→C,D→E,A→C}
属性集的闭包AF+={A→B,A→C}
BF+ = {B→C} - 两个函数依赖集等价 等同于他们的闭包等价
- 最小依赖集Fmin:从左向右验算结果可能不同
- Armstrong公理系统:
例题:已知关系模式R<U,F>,其中U={A,B,C,D,E};F={AB→C,B→D,C→E,EC→B,AC→B},求(AB)F+,(BC)F+
X0 = AB
X1 = X0(AB) +CD = ABCD
X2 = X1(ABCD)+CDEB = ABCDE = U
AB→ABCDE = U
(AB)F+ = U = ABCDE,说明AB是候选码X0 = BC
X1 = X0(BC) +DE = BCDE
X2 = X1(BCDE)+DEB = BCDE
BC→BCDE
(BC)F+=BCDE,说明BC不是候选码
- 保持函数依赖的模式分解
- 无损连接的模式分解
第五章 关系数据库设计理论及查询优化
- 基本步骤:
- 需求分析:
用户需求的收集和分析,结果得到数据字典描述的数据需求和数据流图描述的处理需求。 - 概念结构设计:
通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型,可以用E-R图表示。 - 逻辑结构设计:
将概念结构转换为某个DBMS所支持的数据模型(例如关系模型),并对其进行优化。 - 物理结构设计:
为逻辑数据模型选取一个最适合应用环境的物理结构包括存储结构和存取方法)。 - 数据库实施:
运用DBMS提供的数据语言(例如SQL)及其宿主语言(例如C),根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。 - 数据库运行和维护:
数据库应用系统经过试运行后即可投入正式运行。在数据库系统运行过程中必须不断地对其进行评价、调整与修改。
- 需求分析:
一、需求分析
- 调查的重点是“数据”和“处理”,获得用户对数据库的“信息要求”、“处理要求”、“安全性和完整性要求”
- 数据字典:
- 数据项
- 数据结构
- 数据流
- 数据存储
- 处理过程
二、概念结构设计
- E-R图
- 联系 也可以有属性
- 冲突:属性冲突、命名冲突、结构冲突
三、逻辑结构设计
- 步骤:
- E-R图向关系模型的转换
- 一个实体型转换为一个关系模式
- 实体性之间的联系:
1:1联系转换为一个独立的关系模式 /与任意一端对应的关系模式合并
1:n联系转换为一个独立的关系模式 /与n端对应的关系模式合并
m:n联系转换为一个独立的关系模式
- 数据模型的优化
- 设计用户子模式
- E-R图向关系模型的转换
四、物理结构设计
- 确定数据库的物理结构:存取方法、存取结构
- 数据库管理系统重用存取方法:
- B+树索引存取方法
- Hash索引存取方法
- 聚簇存取方法
五、数据库的实施和维护
- 数据库实施:
- 用DDL定义数据库结构
- 组织数据入库
- 编制与调试应用程序
- 数据库试运行
- 数据库运行和维护:
- 数据库的转储和恢复
- 数据库的安全性、完整性控制
- 数据库性能的监督、分析和改进
- 数据库的重组织和重构造
六、查询优化
- 查询处理步骤:
- 查询分析
- 词法分析
- 语法分析
- 查询检查
- 合法权检查
- 视图转换
- 安全性检查
- 完整性初步检查
- 查询优化
- 分类:
- 代数优化/逻辑优化:关系代数表达式的优化(选择/连接)
- 物理优化:存取路径和底层操作算法的选择
(能用索引就用索引,不能用就全表扫描,数量较大用索引,具体问题具体分析)- 基于启发式规则的存取路径选择优化
- 基于代价的优化
- 选择依据:
- 基于规则
- 基于代价
- 基于语义
- 查询优化器:
- 等价变换→查询的等价表达式
- 估算各表达式的执行代价
- 找出代价最低的表达式作为查询执行计划
- 查询优化的一般准则:
- 选择运算应尽可能先做
- 在执行连接操作前对关系适当进行预处理
- 投影运算和选择运算同时做
- 将投影运算与其前后的双目运算结合
- 选择运算与笛卡尔积运算结合
- 提取公共子表达式
- 分类:
- 查询执行
- 查询分析
第六章 数据库恢复技术
- 事务:用户定义的一个数据库操作序列,要么全做,要么全不做,是一个不可分割的工作单位
- 事务是恢复和并发控制的基本单位
- 显式定义方式:
- commit:
- 事务正常结束
- 提交事务的所有操作
- 事务中所有对数据库的更新写回到磁盘上的物理数据库中
- rollback:
- 事务异常终止
- 事务运行的过程中发生了故障,不能继续执行
- 系统将事务中的对数据库的所有已完成的操作全部撤销
- 事务回滚到开始时的状态
- commit:
- 隐式方式:数据库管理系统按缺省规定自动划分事务
- 事务的ACID特性:原子性、一致性、隔离性、永久性
- 故障种类——恢复措施:
- 事务内部的故障——事务撤消undo
- 反向扫描——做更新操作的逆操作undo——继续重复以上步骤
- 系统故障
- 正向扫描,建立undo,redo队列——对undo队列进行undo处理,redo队列进行redo处理
- 尚未完成的事务的结果可能已送入物理数据库,造成数据库可能处于不正确状态——让所有非正常终止的事务回滚,强行撤消undo所有未完成的事务
- 有些已完成的事务可能有一部分甚至全部留在缓冲区,尚未写回到磁盘上的物理数据库中,系统故障使得这些事务对数据库的修改部分或全部丢失——重做redo所有已提交的事务
- 介质故障(硬故障)——重装数据库备份文件(数据库管理员介入)
- 重装入最新的后备数据库副本——装入有关的日志文件
- 计算机病毒
- 事务内部的故障——事务撤消undo
- 恢复操作的基本原理:冗余
利用存储在系统别处的冗余数据来重建数据库中已被破坏或不正确的那部分数据 - 恢复机制
- 建立冗余数据:
- 数据转储:
- 静态转储
- 动态转储
- 海量转储:每次转储全部数据库
- 增量转储 :只转储上次转储后更新过的数据
- 登记日志文件:
- 以记录为单位的日志文件:各个事务的开始标记;各个事务的结束标记;各个事务的所有更新操作
- 以数据块为单位的日志文件:事务标识;被更新的数据块
- 作用:事务故障恢复、系统故障恢复必须用日志文件;动态转储必须建立日志文件;静态转储也可以建立日志文件
- 数据转储:
- 建立冗余数据:
第七章 数据库安全性与完整性
- 数据库的安全性:
- 定义:保护数据库以防止恶意的破坏和非法的存取
- 防范对象:非法用户和非法操作
- 数据库的安全性控制:
-
安全模型:用户-DBMS-OS-DB
-
用户身份鉴别:静态口令/动态口令/生物特征识别/智能卡鉴别
-
存取控制:
- 自主存取控制:
- 授权:授予和回收:
- grant [权限] on [表名] to [用户]
- with grant option可以继续传递授权
- revoke [权限] on [表名] from [用户]
- cascade级联收回
- restrict只会收回当前的权限
- 数据库角色:权限的集合,可以为一组具有相同权限的用户创建一个角色,简化授权过程
- 授权:授予和回收:
- 强制存取控制方法:
(1)仅当主体的许可证级别大于等于客体的密级时,该主体才能读取相应的客体;
(2)仅当主体的许可证级别小于等于客体的密级时,该主体才能写相应的客体。
- 自主存取控制:
-
视图机制:
-
审计:审计日志
audit设置审计功能;noaudit取消审计功能 -
数据加密:存储加密、传输加密;加密方法:替换/置换/混合方法
-
- 数据库的完整性:
-
定义:防止数据库中存在不符合语义的数据
-
防范对象:不和语义的、不正确的数据
-
实体完整性:主属性不能取NULL;表级/列级定义主码
-
参照完整性:表级定义外码
违约处理:拒绝执行no action
级联cascade
设置为空值set-null -
用户定义的完整性:
- 属性上的约束条件:
- not null
- unique
- check
- check ( Ssex in (‘男’,‘女’) )
- check(Grade>=0 and Grade<=100)
- 元组上的约束条件:
- check (Ssex=‘女’ or Sname not like ‘Ms.%’)当学生性别是男时,其名字不能以Ms.打头
- 属性上的约束条件:
-
完整性约束命名子句
- 给约束起名:constraint c1 check(Grade>=0 and Grade<=100)
- 修改表中的完整性限制:
alter table student drop constraint c1;
alter table student add constraint c1 check(Grade>=0 and Grade<=100);
-
断言: assertion
create assertion asse_sc_db check (
60>=(
select count(*) from Course,Sc where SC.Cno = Course.Cno and Course.Cname=‘数据库’)); -
触发器: trigger是用户定义在关系表上的一类由事件驱动的特殊的过程。
- 表的拥有者才可以在表上创建触发器
- 同一模式下,触发器名必须是唯一的,触发器名和表名必须在同一模式下
- 触发器只能定义在基本表上,不能定义在视图上
- 触发事件:insert、delete、update
- 触发时机:before、after
- 触发器类型:行级触发器(for each row)、语句级触发器(for each statement)
-
第八章 并发控制
- 多事务执行方式
- 事务串行执行
- 交叉并发方式
- 同时并发方式
- 并发操作带来的数据不一致性:
- 丢失修改
- 不可重复读
- 读“脏”数据
- 并发控制实现——封锁
- 基本锁:排它锁(X)、共享锁(S)
- 封锁协议
一级封锁协议:事务修改数据之前对其加X锁,知道事务结束释放——解决丢失修改
二级封锁协议:一级封锁协议基础上加上事务在读取数据之前必须先对其加S锁,读完后即可释放S锁——解决丢失修改和读“脏”数据
三级封锁协议:一级封锁协议基础上加上事务在读取数据之前必须先对其加S锁,直到事务结束才释放——解决丢失修改、读脏数据、可重复读
第九章 数据库新技术
- NoSQL 数据库(非关系型数据库)
核心特点:
灵活的数据模型(键值对、文档、列族、图等)。
高扩展性(分布式架构,适合海量数据)。
弱化事务一致性,追求高性能(如最终一致性)。
应用场景:
社交网络(图数据库:Neo4j,分析用户关系)。
实时日志存储(文档数据库:MongoDB,灵活存储JSON数据)。
缓存与高并发(键值数据库:Redis,快速读写)。 - 分布式数据库
特征:数据跨节点存储、高可用性、透明性(位置/复制透明)
应用场景:电商物流系统(如京东分布式数据库)、金融交易系统(如蚂蚁集团OceanBase) - 云原生数据库
特征:弹性扩展、自动化运维、多租户隔离(如AWS Aurora、阿里云PolarDB)
应用场景:云服务提供商(IaaS/PaaS)、实时大数据分析 - NewSQL数据库
特征:兼容SQL语法、分布式事务支持(如Google Spanner、TiDB)
应用场景:混合云环境下的高并发交易系统 - 时序数据库
特征:时间序列数据压缩、高效写入(如InfluxDB、Prometheus)
应用场景:物联网(IoT)、工业监控系统 - 图数据库
特征:基于图模型存储、复杂关系查询优化(如Neo4j、Apache TinkerPop)
应用场景:社交网络分析、知识图谱(如百度知识图谱)