数据库系统概论考前复习
第一章
数据库的四个特点
数据结构化
数据共享性高,冗余度低,伸缩性强
数据独立性高
数据由数据库管理系统统一管理和控制
数据模型的组成要素 P18
数据结构
数据操作
数据的完整性约束条件
关系模型
关系:通常说的一张表
元组:表中的一行即为一个元组
属性:表中的一列即为一个属性
码: 表中的某个属性组,它可以唯一确定一个元组
域: 属性的取值范围
分量:元组中的一个属性值
关系模式:对关系的描述 例:学生(学号,姓名,年龄)
关系的每一个分量必须是一个不可分的数据项
关系模型的数据操纵:查询、插入、删除、更新
关系的完整性约束条件:实体完整性、参照完整性和用户定义的完整性。
三级模式
模式:
模式也称逻辑模式,
是数据库中全体数据的逻辑结构和特征的描述,
是所有用户的公共数据视图。
外模式:
外模式也称子模式或用户模式,
它是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,
是数据库用户的数据视图
内模式:
内模式也称存储模式,
一个数据库只有一个内模式。
它是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。
两级映像
外模式/模式映像
当模式改变时(增加新的关系、新的属性、改变属性的数据类型等),由数据库管理员对各个外模式/模式的映像作相应改变,可以使外模式保持不变。应用模式是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性
模式/内模式映像
当数据库的存储结构改变时(例如选用了另一种存储结构),由数据库管理员对模式/内模式映像作相应改变,可以使模式保持不变,从而应用程序不必修改,保证了数据与程序的物理独立性,简称数据的物理独立性
为什么数据库系统有数据与程序的独立性?
DBMS在三级模式之间提供的两级映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。
数据库系统的组成
数据库系统一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员和用户构成。
第二章
关系的完整性
实体完整性
实体完整性规则:若属性(一个或者一组)A是基本关系R的主属性,则A不能取空值。空值就是不知道、不存在、无意义的值。
按照实体完整性规则,如果主码由若干属性组成,则所有这些主属性都不能取空值。
参照完整性
外码、参照关系、被参照关系:
设F是基本关系R的一个或一组属性,但不是关系的码,Ks是基本关系S的主码。如果F与Ks相对应,则称F是R的外码,并称基本关系R为参照关系,基本关系S为被参照关系。其中R和S不一定是不同的关系。
参照完整性规则:
若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中的每个元组在F上的取值必须:
或者取空值(F的每个属性均为空值);
或者等于S中某个元组的主码值。
用户定义的完整性
几个定义
关系模式是型;
关系是值,是关系模式的实例。
候选码:若关系中的某一属性组能唯一地标识一个元组,而其子集不能,则称该属性为候选码
主码:若一个关系有多个候选码,则选定其中一个作为主码
外码:设F是基本关系R的一个或一组属性,但不是关系R的码,如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外部码,简称外码
关系代数的运算
传统的集合运算:并、差、交、笛卡尔积
专门的关系运算:选择、投影、连接、除运算
选择:从关系R中选择满足给定条件的诸元组
投影:关系R上的投影是从R中选择出若干属性列组成新的关系
连接:从两个关系的笛卡尔积中选取属性间满足一定条件的元组
除运算:关系R除以关系S的结果为关系T,则T包含所有在R但不在S中的属性及其值,且T的元组与S的元组的所有组合都在R中
第三章
SQL的特点
①综合统一。SQL语言集数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)的功能于一体
②高度非过程化。只需要提出做什么,而无须指明怎么做。存取路径的选择以及SQL语句的操作过程由系统自动完成
③面向集合的操作方式。SQL语言采用集合操作方式,不禁操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合
CREATE SCHEMA 模式名 AUTHORIZATION 用户名
DROP SCHEMA 模式名 CASCADE | RESTRICT
CASCADE为级联,表示在删除模式的同时把该模式中所有的数据库对象全部删除。
RESTRICT为限制,表示如果该模式中已经定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。只有当该模式中没有任何下属的对象时才能执行DROP SCHEMA语句。
CREATE TABLE 表名
(
列名 数据类型 列级完整性约束条件
表级完整性约束条件
)
CREATE TABLE SC
(
Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY (Sno,Cno), /*主码由两个属性构成,必须作为表级完整性定义*/
FOREIGN KEY (Sno) REFERENCES Student(Sno),
FOREIGN KEY (Cno) REFERENCES Course(Cno)
)
修改基本表
ALTER TABLE 表名 子句
ADD子句:增加新列、新的列级完整性约束条件和新的表级完整性约束条件
DROP COLUMN子句:删除表中的列(CASCADE/RESTRICT)
DROP CONSTRAINT子句:删除指定的完整性约束条件
ALTER COLUMN子句:修改原有的列定义(列名和数据类型)
插入数据
INSERT INTO Student (Sno,Sname,Ssex,Sdept,Sage) VALUES (‘201215128‘,‘陈东‘,‘男‘,‘IS‘,18);
修改数据
UPDATE Student SET Sage=22 WHERE Sno=‘201215128‘;
删除数据
DELETE FROM Student WHERE Sno=‘201215128‘;
空值
属性定义中有NOT NULL约束条件的不能取空值
加了UNIQUE限制的属性不能取空值
码属性不能取空值
视图
视图是从一个或几个基本表中导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中,所以一旦基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。
基本表的行列子集视图一般是可更新的。
若视图来自聚集函数、表达式,则该视图肯定是不可以更新的。
创建视图
CREATE VIEW IS_Student(Sno,Sname,Sage)
AS
SELECT Sno,Sname,Sage FROM Student WHERE Sdept=‘IS‘
WITH CHECK OPTION
WITH CHECK OPTION的作用:以后对该视图进行插入、修改和删除操作时,关系数据库管理系统会自动加上Sdept=‘IS‘的条件
删除视图
DROP VIEW IS_Student CASCADE
视图的作用
简化用户操作
使用户能以多种角度看待同一数据
视图对重构数据库提供了一定程度的逻辑独立性
能够对机密数据提供安全保护
适当利用视图可以更清晰地表达查询
第四章
存取控制
存取控制机制主要包括定义用户权限和合法权限检查两部分
自主存取控制
定义存取权限称为授权。
GRANT INSERT
ON TABLE Student
TO U4
WITH GRANT OPTION
如果指定了WITH GRANT OPTION子句,则获得某种权限的用户还可以把这种权限再授予其他的用户
REVOKE INSERT
ON TABLE Student
FROM U4 CASCADE
注意,收回U4权限的同时,级联收回了U4给其他用户的权限。
数据库角色
角色的创建
CREATE ROLE R1;
创建角色R1
给角色授权
GRANT SELECT,UPDATE,INSERT
ON TABLE Student
TO R1;
使得R1具有对Student表的查询、修改和插入权限
将一个角色授予其他的角色或用户
GRANT R1
TO A,B,C
WITH ADMIN OPTION
使得A、B、C三个用户具有R1所有的权限
如果指定了WITH ADMIN OPTION子句,则获得某种权限的角色或用户还可以把这种权限再授予其他的角色。
角色权限的收回
REVOKE SELECT
ON TABLE Student
FROM R1;
收回R1的SELECT权限
REVOKE R1
FROM A
通过R1来收回A的权限
强制存取控制
强制存取控制是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据,从而提供了更高级别的安全性。
敏感度标记:绝密、机密、可信、公开
主体:许可证级别
客体:密级
主体读写客体的原则:
(1) 仅当主体的许可证级别 ≥ 客体的密级时,主体才能读取客体;
(2) 仅当主体的许可证级别 ≤ 客体的密级时,主体才能写客体。
审计
审计功能把用户对数据库的所有操作自动记录下来放入审计日志中。审计员可以利用审计日志监控数据库中的各种行为,重新啊导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容。
数据加密
数据加密主要包括存储加密和传输加密
第五章
数据库的完整性是指正确性和相容性
完整性约束机制的三个部分:定义完整性约束条件;完整性检查;违约处理
实体完整性
规则:某一关系的主属性不能取空值。
定义:在CREATE TABLE语句中,使用PRIMARY KEY定义主码。
检查:
时机:向基本表中插入记录或修改主码时
内容:主码值是否唯一;主码的各个属性是否均不为空
违约处理:一律拒绝
参照完整性
规则:外码的取值要么为空,要么等于被参照关系中某个元组的主码值。
定义:在CREATE TABLE语句中,使用FOREIGN KEY定义外码;用REFERENCES指明外码参照的表及主码
FOREIGN KEY (<外码列名>)
REFERENCES<被参照表名>(<主码>)
ON <DELETE|UPDATE>
<NO ACTION|SET NULL|CASCADE>;
检查和违约处理:
约束条件
列值非空(NOT NULL)
列值唯一(UNIQUE)
检查列值是否满足一个条件表达式(CHECK短语)
完整性约束命名 P165
格式:CONSTRANT<完整性约束名><完整性约束条件>
完整性约束条件包括NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK短语
修改表中的完整性限制
ALTER TABLE Student DROP CONSTRAINT C1;
ALTER TABLE Student ADD CONSTRAINT C1 CHECK(Sno BETWEEN 900000 AND 999999);
修改限制前,首先使用drop删除限制,然后添加新的约束条件。
第六章
一个好的模式应当不会发生插入异常、删除异常和更新异常,数据冗余应尽可能少。
数据依赖是一个关系内部属性与属性之间的一种约束关系。
通常按属性间依赖情况来区分关系规范化程度为第一范式、第二范式、第三范式和BCNF范式。
不好的关系模式具有的四个问题:数据冗余;插入异常;删除异常;修改困难
该关系模式存在以下四个严重问题:
数据冗余
数据库中不必要的重复存储就是数据冗余。此关系中,有关学生所在学院和其所对应的宿舍楼的信息有冗余,因为一个院有多少个学生,这个院所对应的宿舍楼的信息就要重复存储多少遍。
插入异常
应该存储的信息无法存储。插入记录时出现不能插入等一些不合理现象。如果某个学生还没有选课,但已经有了college和Sloc信息,我们也不能将此学生的这些已知信息插入到数据库中。因为Cno为空,而Cno为主属性,不能为空,因此也就丢掉了该学生的其他基本信息。
删除异常
不该删除的信息被删除。如果一个学生只选了一门课,而后来又不选了,则应该删除此学生选此门课程的记录。但由于这个学生只选了一门课,那么删掉此学生的选课记录的同时也删掉了此学生的其他基本信息。
更新异常(修改困难)
由于数据的重复存储,会给更新带来很多麻烦。可能会导致数据的不一致,这将直接影响系统的质量。若某一学生从一院转到三院,那么不但要修改学生的college列的值,而且还要修改其Sloc列的值,从而使修改复杂化。
一方面,修改工作量大;另一方面,可能漏改或该错,会造成数据的不一致性。
函数依赖:设 R(U)是属性集U上的关系模式,X、Y是U的子集。对于任意r中的任意两个元组u、v都有 u[X]=v[X] Þ u[Y]=v[Y] 成立,则称X函数决定Y,或称Y函数依赖于X,记作X->Y。
完全函数依赖:X->Y,且对任意的X’ ⊂ X, 都有X’ -/->Y, 则称X->Y是一个完全函数依赖, 即Y完全依赖于X。记作X->Y。
部分函数依赖: X->Y,但Y不完全函数依赖于X,即存在X’ ⊂ X,有X’->Y。记作 X->Y。
X函数确定Y,Y函数依赖于X,X->Y
属性X、Y之间:一对一(X->Y,Y->X);多对一(X->Y)。
已知X->Y,若Y是X的子集,则称为平凡的函数依赖;否则称为非平凡函数依赖。
完全函数依赖/部分函数依赖/传递函数依赖
候选码:能唯一标识某一元组,而其子集不能,这样的属性组或属性。
能够完全决定关系模式的属性或属性组合,属性集U完全函数依赖于K,则K称为关系模式R的候选码。
超码:U函数依赖于K,即K->U,则K称为超码
若候选码多于一个,则选定一个为主码。
包含在任何一个候选码中的属性称为主属性,不包含在任何一个候选码中的属性称为非主属性。
规范化:
一个低一级范式的关系模式通过模式分解可以转换成若干个高一级范式的关系模式的集合,这种过程就叫规范化。
第一范式:
定义:关系的每个分量必须是不可再分的数据项。
说明:属性不可再分;属性下的值不可再分
第二范式:
定义:已知R属1NF,若R的每个非主属性都完全函数依赖于任何一个候选码,则R属2NF。
说明:消除关系模式中非主属性对主码的部分函数依赖,即可得到2NF。
第三范式:
定义:已知R属2NF,若不存在任何非主属性对码的传递依赖和部分函数依赖,则R属3NF。
说明:如果R的候选关键字是全键(没有非主属性),则R属3NF。
BCNF:
定义1:已知R属1NF,若对任何非平凡函数依赖X->Y,都有X包含候选码,则R属BCNF。
定义2:如果R∈3NF,并且不存在主属性对码的部分和传递函数依赖,则其是BCNF。
第七章
数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程五个部分
E-R图
实体型用矩阵表示,矩形框内写明实体名
属性用椭圆形表示,并用无向边将其与相应的实体型连接起来
联系用菱形表示,菱形框中写明联系名,并用无向边分别与有关实体型连接起来,同时标注联系的类型(1:1,1:n,m:n)
属性不能再具有需要描述的性质,属性必须是不可分的数据项,不能再由零一些属性组成。
属性不能与其他实体具有联系,联系只能发生在实体之间
为了简化E-R图,凡是能够作为属性对待的事物,应尽量作为属性。
E-R图向关系模型的转换原则
(1)实体型的转换:一个实体型转换为一个关系模式
关系模式的属性:实体的属性
关系模式的码:实体的码
(2)联系的转换
①1:1联系 可转换为一个独立的关系模式(属性:与该联系相连的各实体的码+联系本身的属性;候选码:每个实体的码),也可与相连的任意一端对应的关系模式合并(属性:原关系模式的属性+另一端关系模式的码+联系本身的属性;合并后的码:不变)
②1:n联系 可转换为一个独立的关系模式(属性:与该联系相连的各实体的码+联系本身的属性;候选码:n端实体的码),也可与n端对应的关系模式合并(属性:原关系模式的属性+1端关系模式的码+联系本身的属性;合并后的码:不变)
③m:n联系 一个m:n联系转换为一个关系模式(属性:与该联系相连的各实体的码+联系本身的属性;候选码:各实体码的组合)
④三个或三个以上实体间的一个多元联系 转换为一个关系模式(属性:与该多元联系相连的各实体的码+联系本身的属性;候选码:各实体码的组合)
⑤具有相同码的关系模式可合并(目的:减少系统中的关系个数;合并方法:将一个关系模式的全部属性加入到另一个关系模式中,然后去掉其中的同义属性,适当调整次序)
数据库设计步骤
需求分析
概念结构设计
逻辑结构设计
物理结构设计
数据库实施
数据库运行和维护
第十章
事务:是数据库中执行的一个工作单位,由用户定义的一组操作序列构成。这些操作,要么全做,要么全不做。
SQL语句:
开始事务:BEGIN TRANSACTION
提交:COMMIT,提交事务的所有操作,将事务中所有对数据库的更新写回到磁盘上的物理数据库中,事务正常结束
回滚(撤销事务中所有已完成的操作(对数据库的更新操作),回滚到事务开始时的状态):ROLL BACK
事务的特征:ACID原则(原子性、一致性、隔离性、持久性)
原子性:
事务是数据库的逻辑工作单位,事务中包括的操作要么都做,要么都不做。
一致性:
数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。
隔离性:
一个事务的执行不能被其他事务干扰。一个事务的内部操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能相互干扰。
持续性:
一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
数据库故障的种类:
事务内部的故障
事务在运行至正常终止点前被终止
系统故障
造成系统停止运转的任何事件,使得系统要重新启动
系统故障造成数据库不一致状态:
一是未完成事务对数据库的更新可能已经写入数据库
二是已提交事务对数据库的更新可能还留在缓冲区没来得及写入数据库
介质故障
磁盘上的物理数据和日志文件被破坏
计算机病毒
数据库恢复技术:
数据转储:静态转储和动态转储
登记日志文件
日志文件
日志文件是用来记录事务对数据库的更新操作的文件。
格式:以记录为单位或者以数据块为单位
以记录为单位的日志文件中需要登记的内容:
各个事务的开始(BEGIN TRANSACTION)标记
各个事务的结束(COMMIT或ROLLBACK)标记
各个事务的所有更新操作
每个事务的开始标记、结束标记和每个更新操作均为日志文件中的一个日志记录
日志文件的作用:
事务故障和系统故障恢复必须用日志文件
在动态转储方式中必须建立日志文件,后备副本和日志文件结合起来才能有效地恢复数据库
登记日志文件的原则:按并发事务的时间次序登记;先登记日志文件,再写数据库
恢复策略:P300
事务故障的恢复
特点:利用日志文件撤销(UNDO)未正常终止事务对数据库的修改,对用户透明,系统自动完成。
步骤:
反向扫描日志文件,查找该事务的更新操作
对该事务的更新操作执行逆操作
重复前两个步骤,直到读到此事务的开始标记,事务故障恢复完成。
系统故障的恢复
特点:撤销故障发生时未完成的事务,重做已完成的事务。由系统在重新启动时自动完成,不需要用户干预。
步骤:
正向扫描日志文件,找出在故障发生前已经提交的事务(既有BEGIN TRANSACTION记录,也有COMMIT记录),将其事务标识记入重做队列。同时找出故障发生时尚未完成的事务(这些事务只有TRANSACTION记录,无相应的COMMIT记录),将其事务标识记入撤销队列。
对撤销队列中的各个事务进行撤销处理,进行撤销的方法是,反向扫描日志文件,对每个撤销事务的更新操作执行逆操作,即将日志记录中“更新前的值”写入数据库
对重做队列中的各个事务进行重做处理,进行重做处理的方法是:正向扫描日志文件,对每个重做事务重新执行日志文件登记的操作,即将日志记录中“更新后的值”写入数据库
介质故障的恢复
特点:重装数据库,然后重做已完成的事务
步骤:
装入最新的数据库后备副本(离故障发生时刻最近的转储副本),使数据库恢复到最近一次转储时的一致性状态;对于动态转储的数据库副本,还需要同时装入转储开始时刻的日志文件副本,利用恢复系统故障的方法,才能将数据库恢复到一致的状态。
装入相应的日志文件副本(转储结束时刻的日志文件副本),重做已完成的事务。即首先扫描日志文件,找出故障发生时已经提交的事务的标识,将其记入重做队列;然后扫描日志文件,对重做队列中的所有事务进行重做处理。即将日志记录中“更新后的值”写入数据库。
第十一章
1.理解并发操作及其带来的三种数据不一致性问题
2.掌握锁的类型和锁相容矩阵
3.掌握三级封锁协议的内容
4.掌握串行的调度、可串行化调度、冲突可串行化调度
1.1并发操作带来的三个问题
(1)丢失修改【写-写】
(2)污读(脏数据)【修改-读】(T1被撤销)
(3)不可重读【读-更新(修改/删除/插入)】
2.1 封锁
(1)锁的类型
排他锁(写锁,X锁)、共享锁(读锁,S锁)
(2)锁相容矩阵
给出了当事务T1获得某数据上的锁后,事务T2欲申请该数据上的某个锁时,是否被批准的规则。
总结(X0 SS):如果R已加X锁,则不能再加任何锁;如果R已加S锁,则只能再加S锁不能加X锁。
3.1三级封锁协议
一级封锁协议(解决“丢失修改”):事务T在修改数据对象之前,必须对其加X锁,直到事务结束才释放。
二级封锁协议(解决“污读”):在一级封锁协议的基础上,事务T在读取数据对象之前,必须对其加S锁,读完后立即释放。
三级封锁协议(解决“不可重读”):在一级封锁协议的基础上,事务T在读取数据对象之前,必须对其加S锁,直到事务结束才释放。
3.2 活锁和死锁
预防死锁:一次封锁法、顺序封锁法
诊断解除:超时法、等待图法
4.1并发调度的可串行性
可串行性是并行事务正确性的唯一准则。
可串行化的调度:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同。
4.2冲突可串行化调度
冲突可串行化调度:保证一个调度中冲突操作次序不变的前提下,通过交换不同事务的非冲突操作的次序,能够得到一个串行调度。
冲突操作:不同事务对同一数据进行的写写、读写操作。
不同事务的冲突操作和同一事务的两个操作是不能交换的。
在一个调度中,改变不同事务的非冲突操作的顺序不影响数据库的状态。而冲突操作和同一事务的两个操作的顺序不能改变。
冲突可串行化调度一定是可串行化调度,但可串行化调度不一定是冲突可串行化调度。
4.3 两段锁协议
2PL是并发控制正确性的充分条件,但不是必要条件。
内容:
(1)在读、写操作之前,首先要获得封锁
(2)释放一个封锁之后,不再获得其他封锁