目录
第3章:关系数据库标准语言SQL
第4章:数据库安全性
第5章:数据库完整性
第6章:关系数据库理论
第7章:数据库设计
第9章:关系查询处理和查询优化
第10章:数据库恢复技术
第11章:并发控制
第1章:绪论
数据模型是数据库系统的核心和基础
第2章:关系数据库
域:一组具有相同数据类型的值的集合。如:整数、实数、字符串、日期等。
行和列的次序可以任意交换。
关系不满足交换律,但为关系的每列附加一个属性名,可以取消有序性。
候选码:若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为关系的一个候选码。(任意两个元组的候选码不同)
主码:若一个关系有多个候选码,则选定其中一个为主码。
主属性:候选码的所有属性。
笛卡尔积:
象集:
选择:
投影:
连接:
除:
外码:
第3章:关系数据库标准语言SQL
这一部分内容可以见我下面的博客:
OpenGauss常用操作语法大全
SQL的5个特点:
第4章:数据库安全性
数据库安全性:防止(非法用户对数据库的)恶意破坏和非法存取,造成数据泄露、更改或破坏。
数据库安全级别划分:由低到高,D,C1(自主存取控制DAC),C2,B1(强制存取控制MAC,审计),B2,B3,A1
存取控制:确保只授权给有资格的用户访问数据库的权限。分为:定义用户权限和合法权限检查两部分。
用户权限组成:数据对象,操作类型。
GRANT命令:
ON后面一般跟的是表名,WITH GRANT OPTION的意思是被授权用户还可以把权限授权给别人。
REVOKE命令:
将TO改为FROM
角色:角色是权限的集合。是被命名的一组与数据库操作相关的权限。
创建角色:CREATE ROLE 角色名。删除角色:DROP ROLE 角色名。然后可以用GRANT命令给角色授权。
将角色授权给其它角色或用户:WITH ADMIN OPTION 还可以把权限授权给其它角色。
主体敏感度标记:许可证级别。
客体敏感度标记:密级。
BLP保密性模型:上读,下写。
创建视图语法:CREATE VIEW 视图名 AS SELECT 字段FROM 表WHERE 条件
GRANT 权限(如:ALL PRIVILEGES) ON 视图名 TO 用户
审计:启用专门的审计日志,将用户对数据库的所以操作记录在上面。
第5章:数据库完整性
数据库完整性:(防止数据库中存在不符合语义的数据,防止存在不正确的数据)是指数据的正确性和相容性(正确性:符合现实语义,反映当前实际状况。相容性:在不同关系表中的数据符合逻辑)。分为:实体完整性(PRIMARY KEY)参照完整性(FOREIGN KEY)用户定义完整性(CHECK NOT NULL UNIQUE)
定义(创建)触发器:
第1行:创建触发器。第2行:激活的时机是什么,在哪张表上。第3行:更改新旧表的指代名(当需要把数据写到另一张表上时)。第4行:触发类型。第5行:触发条件。第6行:触发动作体。
:表名_触发时机_触发器事件
:可以是INSERT、DELETE、UPDATE
:触发器只能定义在基本表上,不能定义在视图上
:相当于给更新前和更新后的行取一个别名
:行级触发器:FOR EACH ROW,列级触发器:FOR EACH STATEMENT
:触发条件为真时触发器被激活。
:如果是语句器触发器,不能在触发动作体中使用NEW或OLD进行引用。
第6章:关系数据库理论
考点:1、写出极小函数依赖(最小依赖集/最小覆盖)。2、判断2NF,3NF,BCNF,4NF。3、求候选码。4、分解成BCNF
极小函数覆盖集:考虑语义,然后指明关系模式下,两个元素间的决定关系。
(语义关系:Dept->Pname Class->Pname Sno->Class Dept->Dor Sno->Mname Mname->Sno Sno->Myear)
department系 Dormitory宿舍 Profession专业
学生:S(Sno,Sname,Sbirth,Dept,Class,Dor)
极小函数覆盖集:Sno->Sname,Sno->Sbirth,Sno->Class,Class->Dept,Dept->Dor(首先是Sno推出Class,然后再由Class推出Dept,最后由Dept推出Dor)。
传递函数依赖:Sno->Dept,Sno->Dor,Class->Dor
候选码:Sno,Sname 外码:Class,Dept 无全码
班级:C(Class,Pname,Dept,Cnum,Cyear)
极小函数覆盖集:Class->Pname,Class->Cnum,Class->Cyear,Pname->Dept
传递函数覆盖集:Class->Dept
候选码:Class 外码:Dept 无全码
系:D(Dept,Dno,Office,Dnum)
极小函数覆盖集:Dno->Dept,Dept->Dno,Dno->Office,Dno->Dnum
无传递函数依赖。
候选码:Dept,Dno 无外码 无全码
学会:M(Mname,Myear,Maddr,Mnum)
极小函数覆盖集:Mname->Myear,Mname->Maddr,Mname->Mnum
无传递函数依赖。
候选码:Mname 无外码 无全码
候选键:
注意:候选键可以由多个主码构成。
求候选键:
第一步:列出L:只在左边出现,R:只在右边出现,LR:既有在左边也有在右边出现,N:两边都没出现。
第二步:求出在L中(如果有N也要把N加入)出现元素的闭包(就是由该元素能推到右边什么元素,全写进来,要注意的是新加入的元素也要看能不能推出其它元素,也都要写进来),如果是全集那么L中元素就是唯一候选码,如下左图。
第三步:如果不是全集,就将LR中的元素逐个加入,求闭包,如果是全集,就说明元素是候选码。
主属性:
求:如果属性出现在候选码里面,那么这些属性的集合就是主属性。
假设属性集(A,B,C,D),候选键是(AB)、(AD),主属性就是(ABD),如下图:
超键:
候选码具有两个重要的性质:
1.唯一性:能够唯一标识关系模式中的每个元组.
2.最小性:候选码的属性集合中的任意一个属性都不能被移除,否则将不再具有唯一性。
注意:候选键可以由多个主码构成。
求候选键:
第一步:列出L:只在左边出现,R:只在右边出现,LR:既有在左边也有在右边出现,N:两边都没出现。
第二步:求出在L中(如果有N也要把N加入)出现元素的闭包(就是由该元素能推到右边什么元素,全写进来,要注意的是新加入的元素也要看能不能推出其它元素,也都要写进来),如果是全集那么L中元素就是唯一候选码,如下左图。
第三步:如果不是全集,就将LR中的元素逐个加入,求闭包,如果是全集,就说明元素是候选码。
主属性:
求:如果属性出现在候选码里面,那么这些属性的集合就是主属性。
假设属性集(A,B,C,D),候选键是(AB)、(AD),主属性就是(ABD),如下图:
超键:
通俗地说就是在候选码基础上,可以选择加属性也可以不加属性,所得的结果是超键。
如:(ABCD)(ADB)(AB)都是超键
1NF(第1范式):每一个分量是不可分的数据项。
完全函数依赖:如果X决定Y,并且对于X的任何一个真子集X‘,都有X’不决定Y。
举个例子,比如:学生学号和课程号可以共同决定某个学生一门课的成绩,但如果单单只有学号或者课程号,无法决定某个学生一门课的成绩。这个是完全函数依赖。
部分函数依赖:如果X决定Y,但Y不完全函数依赖于X。
举个例子,比如:假定不同的系有不同的课程安排,学号和课程号可以决定一名学生所在的系别。但如果单单只有学号,而没有课程号,也可以决定一名学生的系别。这个是部分函数依赖。
2NF(第2范式):若R已属于1范式,且每一个非主属性完全函数依赖于任何一个候选码,则R是2NF。
判断的关键在于:看是否是完全函数依赖,若存在部分函数依赖则非2NF。
判断方法:因此我们只需要逐个选定非主属性,然后看是否存在只依赖于其中一个主属性,而不依赖于另一个主属性的情况,只要有,就不是2NF。
3NF(第3范式):如果关系模式R属于1范式,若R中不存在这样的码X,属性组Y及非属性组Z(Z不属于Y),使得X决定Y,Y决定Z成立,Y不决定X,则R是3NF。
简单地说一下什么是传递函数依赖:比如:如果有属性A决定属性B,刚好属性B决定属性C,则是传递函数依赖。
BCNF(BC范式):
判别:一般是先确定主属性,然后求出候选码(就是哪些主属性的集合能唯一确定其它元素,注意列出单个和多个的情况),然后看左边有没有不是超键,却能推出其它属性的情况,如果有则不是BC范式。
书上的判定方法:每一个决定因素都包含码,意思是每一个决定因素都要能唯一决定其它元组。
第7章:数据库设计
考点:1、通过业务场景画出E-R图。2、E-R图像关系模型转换。
数据库设计的基本步骤:1、需求分析,2、概念结构设计(E-R图),3、逻辑结构设计,4、物理结构设计,5、数据库实施,6、数据库运行和维护。
E-R图:实体型用矩形表示(矩形内实体名),属性用椭圆形表示(椭圆内属性名),联系用菱形表示。下图是1:1、1:n、m:n的联系图:
E-R图转关系模型:将实体型,实体的属性和实体型之间的联系转换为关系模型。
注意:写出关系模型,关系也具有关系模型,看的是连接两个实体之间的现实联系,这点一定要考虑到。最好先把实体的属性写出,是实体本身自带的属性,没有与其它实体进行联系的属性。
课后题:
7、学校中有若干系,每个系有若干班级和教研室,每个教研室有若干教员,其中有的教授和副教授每人各带若干研宄生;每个班有若干学生,每个学生选修若干课程,每门课可由若干学生选修。请用E R图画出此学校的概念模型。
实体属性为:
系:系编号,系名 。班级:班级号,班级名 。教研室:教研室号,教研室名 。学生:学号,姓名,学历 。教员:职工号,姓名,职称。
为什么没有学校,因为是1:n的联系所以与n端的系合并了
系(系编号,系名,学校名)
教研室(教研室号,教研室名,系编号)
教员(职工号,姓名,职称,教研室号)
学生(学号,姓名,学历,班级号,导师号)
课程(课程号,课程名)
选修(课程号,学号,成绩)
8、某工厂生产若干产品,每种产品由不同的零件组成,有的零件可用在不同的产品上。这些零件由不同的原材料制成,不同零件所用的材料可以相同。这些零件按所属的不同产品分别放在仓库中,原材料按照类别放在放在若干仓库中。请用E-R图画出此工厂产品、零件、材料、仓库的概念模型。
仓库(仓库号,仓库名)
零件(零件号,零件名,仓库号,存放量)
材料(材料号,材料名,类别)
产品(产品好,产品名,仓库号)
为什么没有零件的存放,因为是1:n的联系,可以与n端对应的实体型合并
材料存放(材料号,仓库号,存放数量)
注意为什么要将材料存放这些关系单独列出来,因为它们都是m:n的联系,因为要转换为一个关系模式
产品组成(产品号,零件号,组成数量)
零件制作(零件号,材料号,需要数量)
ps:还有需要注意的是如果具有相同码的关系模式可以合并,1:1联系可以与任意一端的关系模式合并
新奥尔良方法,基于E-R模型的数据库设计方法,3NF(第三范式)的设计方法,面向对象的数据库设计方法。
合并,修改和重构
B+树索引存取方法、聚簇存取方法
基本准则:作为属性,不再具有描述的性质,必须是不可分的数据项,不能包含其它属性。属性不能与其他实体具有联系。
第9章:关系查询处理和查询优化
考点:1、查询处理过程。2、查询树、语法树绘制。3、优化方案选择。
1、查询处理过程:查询分析(判断查询语句是否符合SQL语法规则)。查询检查(对合法的查询语句进行语义检查,完整性检查,安全性检查,然后转换成等价的关系代数表达式,采用查询树表示拓展的关系代数表达式)。查询优化(代数优化,改变代数表达式中操作的次序和组合,使查询更高效。物理优化,存取路径和底层操作算法的选择,可以基于规则、代价、语义)。查询执行。
2、全表扫描情况:待选的对象数量较大(如选出女生,或者选出2000年以后出生的大学生)。索引扫描的情况:待选数量较少,且属性字段上有索引。
3、B+树的特点是所有关键字都在叶子结点上,叶子结点间用指针相连,查找范围查询时可以沿着叶子结点,效率较高。(如果要查找Year>2000的数据,就需要先找到Year=2000的数据作为入口进行查找)
4、and取的是交集,or取的是并集。
5、查询树图:project()是投影,select是选择,join是连接。
6、优化思路:减少连接操作。尽量先选择。尽量先排序。尽量用索引扫描。
7、本节掌握3种图:查询树图。关系代数语法树图。优化后的查询树图。
将SELECT Student.Sname FROM Student,SC WHERE Student.Sno=SC.Sno AND SC.Cno=’2’转化为查询树图、关系代数语法树图和优化后的查询树图。
8、注意:树图越靠近叶子结点,说明是越先进行的操。优化后的查询树图一般是先将选择操作放在靠近叶子结点的位置(先做)。最后一步是投影操作。在查询树图中在根节点要写上“结果”二字。
9.2 假设关系R(A,B)和S(B、C、D)情况如下:R有20000个元组,S有1200个元组,一个块能装40个R的元组,能装30个S的元组,估算下列操作需要多少次磁盘块读写。
(2)R中A为主码,A有3层B+树索引,select*from R where A=10;
解析:每次读取B+树的节点需要进行1次磁盘块读取操作(因为读取B+树的节点,需要先读取对应的磁盘块,然后从磁盘块中获取数据。补充一下:磁盘块通常是存储在磁盘上的最小单位。如果需要读取或写入磁盘块中的某一部分数据,需要将整个磁盘块读入内存,然后进行操作,最后再将整个磁盘块写回磁盘。B+树的一个节点存储在一个磁盘块上。子节点可能存储在不同的磁盘块上。)所以3层B+访问3次磁盘,查询到R中元组数据再访问一次磁盘,总计4次。
(3)嵌套循环连接R ⋈ S
(4)如果是有序的:
第10章:数据库恢复技术
系统故障种类:
事务重做:在恢复过程中重新应用已提交事务对数据库所做的更改,确保这些更改在故障发生后仍然存在。
所以对已提交的事务是要重做。因为已提交的事务已经成功完成并保证了数据的一致性。
事务回滚:在恢复过程中撤销未提交事务对数据库所做的更改,将数据库状态回退到事务开始之前,以确保数据的一致性。
因此对未提交的事务是要回滚。因为未提交的事务可能还没有完成,并且不能保证数据的一致性。
注意:回滚的效果是将数据库状态恢复到上一次已提交的事务的状态,而不是仅仅回到上一步操作。已经回滚过的事务,如果在回滚后没有写入新值,不必再次回滚。
技巧:首先用连线标记事务开始和结束的位置,再标记上回滚的位置。考虑两种情况:1、如果故障发生的位置,在事务开始之前,很显然不用考虑回滚或重做。2、如果故障发生的位置在某事务回滚之后,且该事务没有写入新值,也没有结束,则该事务不用重做也不用回滚。
注意:如果题目问:系统故障若发生在序号n之后,写出系统恢复后A、B、C的值,一定要考虑系统故障发生后,进行的回滚和重做操作。
日志恢复技术:对数据库中已提交的事务,全部重做(从建库到故障发生前的事务),对还未提交的事务,进行回滚(撤销)。
检查点恢复技术:恢复的数据范围可以是从系统启动开始到检查点时刻之间的所有记录(循环检查点),也可以是从上一次检查点到当前时刻之间的所有记录(增量检查点),这取决于具体的实现方式。(因此不一定是对数据库中所有已提交的事务进行重做,也可以不重做)
在检查点之前提交的不用重做,在检查点之后提交的重做,在系统故障之后提交的撤销。
第11章:并发控制
事务:是并发控制的基本单位。
多粒度封锁:显式封锁:直接加到数据对象上的锁。隐式封锁:由于上级结点加锁,使该数据对象加上了锁。
意向锁:对一个结点加意向锁,说明该结点的下层结点正在被加锁。三种意向锁:意向共享锁(IS锁,表明后裔结点拟加S锁)、意向排他锁(IX锁,表明后裔结点拟加X锁)、共享意向锁(SIX锁,表明先加X锁,再加IX锁)。
Slock T 申请给T加上S锁,可以R(T)=?相当于是读T的内容,之后要记得Unlock T是给T解锁。
Xlock T 申请给T加上X锁,一定要注意这只是申请,只有当符合条件的时候,这个锁才会被真正加上,可以W(T)=?相当于是将T的内容写入数据库磁盘,之后要记得Unlock T是给T解锁。
另一事务加锁的时机可以是Xlock T的后一个时期,这样优先级最高的Xlock,然后就能轮到次加锁的事务。
如果是在等待之后获得锁,要加上获得诸如Slock T之类的字样,表明获得锁。
两段锁协议:在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁。在释放一个封锁之后事务不再申请和获得任何其他封锁。事务被分为了2个阶段:第一个阶段专门获得封锁,第二个阶段专门释放封锁,但要注意的是释放封锁时候不能再加任何锁。
一级封锁:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。
二级封锁:在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。
三级封锁:在一级封锁的基础上增加事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。
遵循两阶段封锁(2PL)的调度:在两阶段封锁协议中,事务在获取任何锁之前不释放任何锁,只有在获取所有必要的锁之后才开始释放。遵循2PL的调度是可串行化的,因为它们可以通过将事务按照它们的封锁点排序来获得一个等价的串行调度。