这是本科数据库课程的复习。考试内容主要是数据库的基本概念,数据库设计数据库系统的优化和恢复。至于设计底层的数据库管理系统原理,坑先挖了,日后补,是我计划中的一门课程。
目录
绪论
- 数据库系统:一般由数据库。数据库管理系统(及其开发工具)、应用系统、数据库管理员构成。目的:存储信息并支持用户检索和更新所需的信息。
- 数据模型:是数据库中用来对现实世界数据特征的抽象的工具,是数据库中用于提供信息表示和操作手段的形式架构。
- 三要素:数据结构,数据操作,完整性约束。
- ER图:概念模型钟的一种,实体~属性
- 三级模式结构
- 模式:(逻辑模式)数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。一个数据库只有一个模式。
- 外模式:(子模式/用户模式)数据库用户能够看见和使用的局部数据库和逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的系统的逻辑表示。
- 内模式:(存储模式或内视图)是数据物理结构和存储方式的描述,是数据在数据库内部实际存储的表示方式:
- 优点:数据独立性(逻辑,物理),数据安全性,数据操作简易。
- 二级映像功能和三级模式同。(模式映像对应外模式,内模式映像对应模式),保护数据独立性。
- 逻辑独立性:模式改变,但外模式不变,程序不变。
- 物理独立性:物理结构变化,但模式不变,程序不变。
关系数据库
关系数据三个组成部分。
- 关系数据结构:描述实体和实体间的关系。
- 关系操作:
- 查询操作:选择、投影、连接、除、并、差、交、笛卡尔积等。
- 插入、删除、修改操作。
- 关系完整性约束:
- 实体完整性:若属性(指一个或一组属性)A是基本关系R的主属性, A不能取空值。
- 参照完整性:若属性(或属性组)F是基本关系R的外码,它是基本关系S的主码K相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值);或者等于S中某个元组的主码值。
码
- 候选码:若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码。
- 主属性:候选码的属性称为主属性,不包含在任何侯选码中的属性称为非主属性。
- 超码:关系中能唯一标识元组的属性集,超码的任意超集仍是超码。
- 主码:若一个关系有多个候选码,则选定期中一个为主码。
- 外码:设F是基本关系R的一个或一组属性。但不是关系R的码,如果F与基本关系S的主码K相对应。
关系代数
- 集合运算:交,并,差,笛卡尔积。
- 逻辑运算:非,与,或。
- 关系运算:选择,投影
- 连接:等值连接,自然连接,外连接(左,右)
- 除:给定关系R (X,Y) 和S (Y,Z),其中X,Y,Z为属性组;R中的Y与S 中的Y可以有不同的属性名,但必须出自相同的域集;R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在 X 属性列上的投影。
关系数据库理论
- 函数依赖:设R(U)是一个属性集U上的关系模式,X和Y是U的子集, 若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作X$\rightarrow$Y。
- 完全函数依赖:$x \rightarrow y$, 任意x的子集$x^s$, $x^s \not \rightarrow y$.
- 部分函数依赖:$x \rightarrow y$, 存在x的子集$x^s$, $x^s \not \rightarrow y$.
- 传递函数依赖:$x \rightarrow y$, $y \not \in x$, $y \not \rightarrow x$, $y \not \rightarrow z$, $z \not \in y$, 则称Z对X传递函数依赖.
- 候选码:K完全函数决定该关系的所有其它属性。K的任何真子集都不能完全函数决定R的所有其它属性。
- 外部码:
范式
概念
- 1NF:一个关系模式R的所有属性都是不可分的基本数据项.
- 2NF:若R$\in$ 1NF,且每一个非主属性完全函数依赖于码.
- 3NF:每个非主属性都不传递依赖于R的码。
- BCNF:关系模式R<U,F>$\in$ 1NF,若X$\rightarrow$Y且Y $\not \rightarrow$ X时X必含有码,即每个属性都不传递依赖于R的码,则R<U,F> $\in$BCNF
问题
- 1NF存在插入异常、删除异常、数据冗余度大、修改复杂等问题。
- 将一个1NF关系分解为多个2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。
例子
- 不是BCNF但是3NF:关系模式STJ(S,T,J)中,S是学生,T是教师,J是课程。每一教师只教一门课,每门课有若干教师,某一学生选定某课程,就得到一个固定的教师。
函数依赖:(S,J)决定T;(S,T)决定J;T决定J;
这里候选码(S,J),(S,T);
不存在非主属性对码的部分或传递函数依赖,所以STJ属于第三范式;
但是J部分函数依赖于码(T,S),T不是码,所以STJ不属于BCNF。
关系数据库标准语言SQL
- 数据定义:定义数据库中的基本对象、模式(架构)定义、表定义、视图和索引。
- CASCADE(级联):删除模式的同时把该模式中所有的数据库对象全部删除
- RESTRICT(限制); 没有任何下属的对象时 才能执行。
- 索引:建立索引的目的:加快查询速度。
- CLUSTER表示要建立的索引是聚簇索引。索引项顺序与表中记录的物理顺序一致。
- 数据查询
- BETWEEN … AND 包括头尾
- like str的模糊查询
- 逻辑运算优先级:and先于or
- 数据更新 (insert), 修改 (update), 删除
- 视图:虚表,是从一个或几个基本表(或视图)导出的表;只存放视图的定义,不存放视图对应的数据;基表中的数据发生变化,从视图中查询出的数据也随之改变。
关系查询和查询优化
查询处理
- 步骤
- 查询分析:查询语句是否符合语法规则。
- 查询检查:语句中对象的检查和简单的完整性检查。转化为关系代数表达式(查询树)。
- 查询优化:对关系代数表达式进行等价变换,基于规则,代价,语义。
- 查询执行:根据优化后的执行策略生成执行计划,由代码生成器生成执行计划的代码,返回查询结果。
- 查询操作的算法(这方面考试我觉得不会考,但坑先挖下,之后回来补,这方面还是挺感兴趣的。)
- 选择操作算法
- 全表扫描
- 索引扫描(B+树,hash表)
- 连接操作算法
- 嵌套循环
- 排序合并
- 索引连接
- hash join
- 选择操作算法
- 查询优化:不仅仅在于不需要考虑如何实现,还在于系统可以比用户优化的更好。
- 代数优化(总结一些规律)
- 优先做选择
- 投影和选择可同时进行
- 投影和双目运算结合
- 笛卡尔积和选择合并成一个连接
- 物理优化
- 基于规则的启发式:总结一些优化方案
- 基于代价估算:简单的io估算
- 上述结合
数据库安全性
概念
- 数据库的安全性是指保护数据库以防止非法使用所造成的数据泄漏、更改或破坏。
- 数据库安全控制的常用方法和技术。
- 用户标识和鉴别
- 存取控制:通过用户权限定义和合法权限检查确保只有拥有合法权限的用户才能访问数据库,所有未授权人员均无法存取数据。
- 视图机制:
- 审计:建立审计日志,把用户对数据库的所有操作自动记录下来并放入审计日志中。DBA可以利用审计跟踪信息来重现导致数据库现状的一系列事件,找出非法存取数据的人、时间和内容等。
- 数据加密
存储控制
- 自主存取控制方法:定义各个用户对不同数据对象的存取权限。当用户要访问数据库时,首先要检查其存取权限,以防止非法用户对数据库进行存取。
- 强制存取控制方法:每一个数据对象被(强制地)标以一定的加密级别,每位用户也被(强制地)授予某一级别的许可证。系统规定只有具有某一许可证级别的用户才能存取加密级别的数据对象。
- 自主存取控制语句:授权与收回语句。GRANT 语句和 REVOKE 语句实现。
数据库完整性
概念
- 数据完整性:数据的正确性和相容性。
- 完整性约束:定义,检查,违约反映
- 参照完整性
触发器
- 一旦定义,任何用户对表的增删改,均由服务器自动激活触发器,进行集中的完整性控制;可以进行更为复杂的检查和操作,具有更精细和更强大的数据控制能力。
数据库恢复技术
基本概念
- 事务:事务是用户所定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。ACID特性。
- 原子性:事务是数据库的逻辑单位,事务中所包括的读项操作要么都做,要么都不做。
- 一致性:事务执行的结果必须是使数据库从某个一致性状态转变到另一个一致性状态。
- 隔离性:一个事务的执行不能被其他事务干扰,即一个事务内部的操作及所试用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
- 持续性:(永久性)事务一旦提交,它对数据库中主句的改变就应该是永久的。接下来的其他操作不应对其执行结果产生任何影响。
- 为了保证事务的原子性、一致性与持续性。DBMS必须对事务故障、系统故障和介质故障进行恢复;为了保证事务的隔离性和一致性,DBMS需要对并发操作进行控制。
- 日志:日志文件是用来记录事务对数据库所做的更新操作的文件。
- 目的:进行事务故障恢复;进行系统故障恢复;协助后背副本进行故障恢复。
- 作用:1、事务故障恢复和系统故障恢复必须用到日志文件。2.在动态转储方式中必须建立日志文件,后备副本和日志文件结合起来才能有效地恢复数据库。3、在静态转储方式中,也可以建立日志文件。当数据库毁坏后可重新装入后援副本把数据库恢复到转储结束时刻的正确状态,然后利用日志文件,把已完成的事务进行重做处理,对故障发生时尚未完成的事务进行撤销处理。
- 登记原则:1、登记的次序严格按并发事务执行的时间测序。2、必须先写日志文件,后写数据库。
故障恢复
- 事务故障恢复步骤:
- 反向扫描日志文件。
- 对更新进行逆操作。
- 系统故障恢复步骤:
- 正向扫描日志文件。
- 找出重做队列(redo),撤销队列(undo)
- 检查点(checkpoint):显著改善恢复效率。
数据并发控制
- 并发控制可以保证事务的一致性和隔离性,保证数据库的一致性。
- 并发操作可能导致的问题:
- 丢失修改:两个事务1、2同时读入同意数据并进行修改,2所提交的结果破坏(覆盖)了1提交的结果,导致1所做的修改被丢失。
- 不可重复读:事务1读取某一数据后,事务2对其执行更新操作,使1无法再现前一次读取的结果。
- 读‘脏’数据:事务1修改某一数据,将其协会磁盘,事务2读取同意数据后,事务1由于某种原因被撤销,这是事务1已修改过的数据将恢复原值,事务2所读取的数据就与数据库中的数据不一致,则事务2所独到的就是‘脏’数据,即不正确的数据。
- 避免不一致性的方法是并发控制机制。最常用的并发控制技术是封锁技术。
- 锁
- 写锁(排他锁)X
- 读锁(共享锁)S
- 封锁协议
- 一级封锁:修改之前加X锁,事务结束释放。
- 二级封锁:读之前加S锁,读完就释放。
- 三级封锁:读之前加S锁,事务结束释放。
- 活锁和死锁。
- 先来先服务解决活锁
- 死锁可以采取一次封锁或顺序封锁避免,但会降低性能。通常做法允许死锁,然后杀死某一事务。
- 并发调度的可串行性:事务并发是正确的当且仅当结果和串行执行时一致。
- 冲突可串行化:只要可以通过不冲突操作得到串行调度(冲突操作:不同事务对同一个数据的读写操作和写写操作)。
- 两段锁
- 数据读写前要申请对数据的封锁。
- 释放封锁后,不再申请和获得其他锁。
- 若并发执行的所有事务均遵守两段锁协议,则调度是可串行化的。
- 意向锁:对节点加意向锁,表示节点的下层节点正在加锁。(IS,IX,SIX)
- 本文作者: SFARL
- 本文链接: sfarl.github.io/2020/06/29/数据库复习/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!