数据库原理与应用期末复习大纲
1. 数据库系统组成。
数据库系统(DataBase System,DBS)是采用了数据库技术的计算机系统,一般由数据库、数据库管理 系统(及相关使用工具)、应用系统、数据库管理员构成。
数据库系统是引入了数据库及时的计算机系统,一般由数据库,支持数据库运行的软硬件,数据库管理系统 (及其开发工具)、应用程序、数据库管理员和用户组成。
数据库系统的硬件平台及数据库:
- 硬件
- 数据库
软件:
- 数据库管理系统
- 操作系统
- 高级语言和应用开发工具
人员:
- 数据库管理员
- 系统分析员和数据库设计人员
- 应用程序员
- 用户
2. 数据库系统的体系结构、外模式/模式映像、模式/内模式映像。
数据库系统采用三级模式结构,三级模式之间形成了两级映像,从而实现了较高的数据独立柱(三级模式/ 两级映像)
三级模式:
* 外模式:也称为子模式或者用户模式,它是数据库用户(包括应用程序员和最终用户)看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。外模式通常是模式的子集。一个数据库可以有多个外模式。外模式是保证数据库安全性的一个有力措施。由于它是用户的数据视图,如果不同用户在应用需求,看待数据的方式,对数据保密的要求等方面存在差异,则他们的外模式描述是不同的,既然数据是来自同一数据库,但在外模式中的结构、类型、长度、保密级等都可以不同。因此用户根据不同请求,看到的结果是不同的,并且每个用户看到的结果对应外模式中的数据,数据库中的其余数据对他们来说是不可见的。DBMS通过DML对数据记录进行操作
* 模式:模式也称为概念模式或逻辑模式,是数据库中全体数据的逻辑结构和特征描述,它是数据库系统模式结构的中间层,既不涉及数据的物理存储细节和硬件环境,也与具体应用程序无关。模式实际上是数据库中数据在逻辑上的视图。一个数据库只有一个模式。数据库的模式以某一种数据模型为基础,同时考虑了所有用户的需求,并将这些需求有机地结合成一个逻辑整体。DBMS通过DDL定义数据的模式,同时还需要定义数据之间的联系及相关的安全性,完整性约束条件。
* 内模式:内模式也称为存储模式,它是数据物理结构和存储结构的底层描述,是数据在数据库内部的表示方式。例如,记录的存储方式是顺序存储、按照B+树结构存储还是按照Hash方法存储;索引按照什么方式组织;数据是否压缩存储,是否加密;数据的存储记录有何规定等。一个数据库只有一个内模式。
两级映像:
- 外模式/模式映像:定义了该外模式与模式之间的对应关系。对于每一个外模式,数据库系统都有一个外模式/模式映像。这些映像定义通常包含在各自外模式的描述中。当模式改变时,由数据库管理员对各个外模式/模式的映像作相应改变,外模式可以保持不变,从而不必修改应用程序,实现数据的逻辑独立性。如在模式中增加新的记录类型(只要不破坏原有记录类型之间的联系型);在原有记录类型之间增加新的联系;在某些记录类型中增加新的数据项。
- 模式/内模式映像。数据库中只有一个模式,也只有一个内模式,所以模式/内模式映像是唯一的,它定义了数据全局逻辑结构与存储结构之间的对应关系。该映像定义通常包含在模式描述中。当数据库的存储结构改变了,由数据库管理员对模式/内模式映像作相应改变,可以使模式保持不变,从而保证数据的物理独立性。如改变存储设备或引进新的存储设备;改变数据的存储位置;改变存储记录的体积;改变数据组织方式。
3. SQL语言中,创建、修改、删除一个表的命令。
创建表:
CREATE TABLE Student
(Sno CHAR(10) NOT NULL,
PRIMARY KEY(Sno),
Sname CHAR(10),
Ssex CHAR(2),
Sage INT,
Sdept CHAR(20),
Foregin KEY(Sno) reference Student(Sno)
)
修改表:
ALTER TABLE Student
ADD Room CHAR(8) NULL
ALTER TABLE Student
ALTER COLUMN Room CHAR(6)
ALTER TABLE Student
DROP COLUMN Room
删除表:
DROP TABLE Test[restrict|cascade]前者限制删除的表不能被其他表引用,如果存在依赖则不能删除。后者无限制,删除基本表的同时,相关的依赖依赖对象也会一起删除。
4. 关系R和S进行自然连接的条件。
当"="时连接运算称为等值连接。它是从关系R和S的广义笛卡尔积中选取A,B属性值相等的元组。
自然连接是特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性,并且在结果中把重复的属性列去掉。
一般连接运算是从行的角度进行运算的,但自然连接还需要去掉重复的列,所以同时从行和列的角度进行运算
自然连接和等值连接的差别如下:
- 自然连接要求相等的分量必须具有相同的属性名,等值连接则不要求
- 自然连接要求把重复的属性名去掉,等值连接却不需要这样做。
5. 选择、投影、并、交、差运算。交不是基本的关系代数运算,交可以被差运算取代。
选择、投影、并、交、差运算。交不是基本的关系代数运算,交可以被差运算取代。
6.关系数据库三个完整性、实体完整性约束通过主码来实现,参照完整性约束可以通过外码来实现。
关系模型中允许定义三类完整性约束:实体完整性约束,参照完整性约束,用户定义的完整性约束。其中实体完整性是规定表的每一行在表中是唯一的实体。参照完整性是指两个表的主关键字和外关键字的数据应该一致,保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散。这两个约束是由关系系统自动支持的。用户定义的完整性是针对某个特定关系数据库的约束条件,它反映某一具体应用必须满足的语义要求;
7. 超码、候选码、主码、外码。
- 超码:是一个或多个属性的集合,这些属性可以让我们在一个实体集中唯一地标识一个实体。一个关系可能有多个超码。如果K是一个超码,那么K的任意超集也是超码,也就是说如果K是超码,那么所有包含K的集合也是超码。
- 候选码:是从超码中选出的,自然地,候选码也是一个或多个属性的集合。一个关系可能有多个候选码。候选码是最小超码,它们的任意真子集都不能成为超码。例如,如果K是超码,那么所有包含K的集合都不能是候选码;如果K、J都不是超码,那么K和J组成的集合(K,J)有可能是候选码。
- 主码:是从多个候选码中任意选出的一个,如果候选码只有一个,那么该候选码就是主码。虽然说主码的选择是比较随意的,但在实际开发中还是要靠一定的经验,不然开发出来的系统会出现很多问题。一般来说主码都应该选择那些从不或者极少变化的属性。
- 外码:在关系K中的属性或属性组若在另一个关系J中作为主码使用,则称该属性或属性组为K的外码。K的外码和J中的主码必须定义在相同的域上,允许使用不同的属性名。
8. SELECT查询语句中的通配符。
select * :*表示所有列
9. 视图的定义与视图的作用。
视图(View)是从一个或者多个基本表(或视图)中导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以基本表中的数据发生变化,从视图中查询出的数据也随之改变。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。视图一经定义,就可以和基本表一样被查询,删除。也可以在一个视图之上再定义新的视图,但对视图的更新(增删改)操作则有一定的限制。
对于视图需要注意的点:
(1)当基础关系发生变化后,再去访问视图,看到的虚拟关系也会发生相应的变化
(2)用户对视图的查询,系统在执行时必须转换为对基础关系的查询
(3)用户对视图的修改,系统在执行时必须转换为对基础关系的修改
视图的作用:
视图定义在基本表之上,对视图的一切操作最终也要转换为对基本表的操作。
- 视图能简化用户的操作
- 视图使用户能以多个角度看待同一数据
- 视图对重构数据库提供了一定程度的逻辑独立性
- 提高了数据的安全性
10. 索引的作用。如何建立索引。聚集索引、非聚集索引、唯一索引 的各自的特点。
用户对数据库最常用的操作之一就是查询数据。在数据量比较大时,搜索满足条件的数据可能会花费很长的时间,从而占用较多的服务器资源。为了提高数据检索的能力 ,在数据库中引入了索引的概念。数据库中的索引类似于书籍中的目录。在书籍中,利用目录,用户不必翻阅完整本书就能迅速地找到所需要的信息。在数据库中,索引使得不需要对整个表进行扫描,就可以在其中找到所需数据。
- 建立索引:
CREATE [UNIQUE] [CLUSTERED] [NONCLUSTERED] INDEX <索引名>
ON 表名 (<列名>[次序] [,<列名>[<次序>]]...)
- UNIQUE:表示要创建的索引是唯一索引。此索引的每一个索引值只对应唯一的数据记录。唯一索引可以只包含一个列(限制该列取值不重复),也可以由多个列共同构成(限制这些列的组合取值不重复)。只有当数据本身具有唯一性特征时,指定唯一索引才有意义。实际上,当在表上创建PRIMARY KEY或UNIQUE约束时,系统会自动在这些列上创建唯一索引。
- CLUSTERED:表示要建立的索引是聚集索引。所谓聚集索引是指所有项的顺序与表中记录的物理顺序一致
- NONCLUSTERED:表示要建立的索引是非聚集索引。非聚集索引与书后的术语表类似。书的内容(数据)存储在一个地方,术语表(索引)存储在另一个地方。而且书的内容(数据)并不按术语表(索引)的顺序存放,但术语表中的每个词在书中都有确定的位置。非聚集索引类似术语表,而数据就类似一本书的内容。非聚集索引并不改变数据的物理存储顺序,因此,可以在一个表上建立多个非聚集索引。就像一本书可以有多个术语表意一样,如一本介绍园艺的书可能会包含一个植物通俗名称的术语表和一个植物学名称的术语表,因为这是读者查找信息的最常用的两种方法。
注:如果没有指定索引的类型,则默认是创建非聚集索引。聚集索引和非聚集索引都可以是唯一索引。因此,只要列中的数据是唯一的,就可 以在同一个表上创建一个唯一的聚集索引和多个唯一的非聚集索引
11. 数据库安全性的概念。SQL语言的GRANT和REVOKE语句。
数据库的安全性是指保护数据库以防止非法用户访问数据库,避免造成数据泄露,更改或破坏。
(1)数据库遭到破坏
(2)数据丢失
(3)数据不一致
(4)数据库管理系统故障
GRANT语句:
GRANT <权限名>[,<权限名>] on <对象> to <用户1>,<用户2>,...| PUBLIC [WITH GRANT OPTION]
例:
GRANT SELECT,UPDATE ON STUDENT TO LIMING WITH GRANT OPTION;
GRANT SELECT(Sno,Sname),UPDATE(Sname) ON STUDENT TO U5;
GRANT SELECT ON SC TO PUBLIC;
GRANT CREATE TABLE,CREATE VIEW TO LIMING;
GRANT ALL ON STUDENT TO LIFANG;
REVOKE语句:
REVOKE <权限名>[,...] ON <对象> FROM <用户1>,<用户2>,... | PUBLIC
例:
REVOKE UPDATE ON STUDENT FROM LIMING;
REVOKE SELECT ON SC FROM PUBLIC;
REVOKE CREATE TABLE FROM LIMING;
12. 函数依赖、属性集闭包、运用属性集闭包求超码(候选码)。判断2NF、3NF。
13. 关系模式分解的原则:保持函数依赖,无损连接分解。
关系模式规范化的方法是进行模式分解,但是分解后产生的模式应与原模式等价;即模式分解必须遵守一定的准则,不能表面上消除了操作异常,却留下其他问题。模式分解需要满足以下标准:
(1)模式分解具有无损连接性
(2)模式分解能够保持函数依赖
无损连接是指分解后的关系与原关系相比,既不多出信息,也不丢失信息。保持函数依赖是指在模式分解的过程中函数依赖不能丢失的特性,即模式分解不能破坏原来的语义。为了得到更高范式的关系而进行的模式分解是否能够既保证无损链接又保持函数依赖呢?答案是否定的
对于无损连接分解就是不会丢失信息的分解,判定"一分二"是否无损链接的充分必要条件是,将关系R分解为R1和R2,则当以下两个函数依赖之一能够成立时,这种分解是无损的。
R1∩R2-->R1-R2
R1∩R2-->R2-R1
有关系模式R(C,T,H,R,S),函数依赖集为F={C-->T,HR-->C,HT-->R,HS-->R}。现在将R分解为两个关系,R1(C,H,S)和R2(C,T,H,R),这一分解是无损的吗?
解:是
R1∩R2=CH
R1-R2=S
R2-R1=TR
因为CH+=(CHTR),即CH-->TR成立
可以发现R1∩R2-->R2-R1,所以R分解为R1,R2是无损的。
worker(name ,branch,manager)分解为w1(name ,branch),b1(branch,manager)
W1∩B1=branch
W1-B1=name
B1-W1=manager
branch+=manager
W1∩B1-->manager,所以是无损连接
14. 掌握规范到3NF的方法。
**第一范式1NF:**每个属性都是原子的关系是第一范式,也就是说关系的每个属性都是原子属性(属性值不可再分)。例如,年龄,性别是原子属性;父母是非原子属性。
必须将非1NF的关系变为1NF的关系,关键的方法是将表中每个非原子的属性转换成原子属性。包含多值属性的表规范成为第一范式的关系的处理步骤如下。
第一步:将多值属性从原表中移出
第二步:生成一个新关系,这个新关系同时还包含原来的主码,新关系的主码是原关系的主码与多值属性的组合
包含复合属性的表规范到第一范式的处理步骤比较简单,只要将复合属性转换成相应的多个原子属性即可
第二范式2NF:
若关系模式R(U,F)∈1NF,并且每一个非主属性都完全函数依赖于R的候选码。则R(U,F)∈2NF
判断是否属于2NF的方法是:是否存在某个非主属性,它部份依赖候选码,或者说依赖候选码的一部分,存在则不属于2NF,不存在则属于2NF。
例如所示关系S-C-G(Sno,Cno,Cname,Grade)就不是第二范式的关系。因为(Sno,Cno)是主键,在此关系中主属性有(Sno,Cno),非主属性有Cname,Grade。因为Cno->Cname,所有(Sno,Cno)P>Cname,这就是非主属性部分依赖于候选码。
这个关系模式S-C-G(Sno,Cno,Cname,Grade)不是一个好的关系,它存在着数据冗余,以及插入异常,删除异常,修改异常
**第三范式3NF:**若关系模式R(U,F)∈1NF,并且每一个非主属性都非传递依赖于候选码,则R(U,F)∈3NF
判断关系是否属于3NF的方法是:是否存在某个非主属性,它的传递函数依赖于候选码,或者函数依赖于某个非主属性,存在则不属于3NF,不存在则属于3NF。
例所示关系模式worker(name ,branch,manager)就不是第三范式的关系。因为name是主键,在此关系中主属性有name,非主属性有branch和manager。而name-->branch,branch-->manager,所以name-->(传递)manager,这就是非主属性传递依赖于候选码。关系模式worker(name,branch,manager)是第二范式的关系。因为该关系的候选码只有一个属性,其他非主属性对候选码都是完全函数依赖
从上面例子可以看出,关系R∈2NF,但有可能不属于3NF。达到3NF的要求比达到2NF高。
**BC范式:(BCNF)**期末考试一定不满足这个范式
R∈BCNF,则R∈3NF(充分)
R∈3NF,则R不一定∈BCNF(不必要)
如果R∈3NF,且只有一个候选码,则是充分必要条件
15. 事务的四个特性,事务并发执行的三种数据不一致。
事务具有四个特性:原子性(Automicity)、一致性(Consistency)、隔离性(Isoation)、持久性(Durability),简称为ACID特性。
- 原子性:事务是数据库的逻辑工作单位,事务中包含的所以操作(特指修改操作)要么全部做,要么全不做
- 一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。独立执行一个事务(无其他事务同时并发执行)的结果必须保证数据一致性。即事务开始前,数据满足一致性要求;事务结束后,数据虽然变化了,但仍然满足一致性要求
- 隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发的事务是隔离的,并发执行的各个事务之间不能互相干扰
- 持久性:任何事务一旦提交了,它对数据库的影响就必须是永久性的。无论发生什么故障,都不能取消或破坏这种影响。
***考:***错误的并发调度可能产生的三种错误,又称为三类数据不一致性:
- 丢失修改
- 不可重复读
- 读脏数据
16. 封锁技术、读锁、写锁。
封锁:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同,这种调度策略为可串行化的调度。可串行化是并发事务正确调度的原则。虽然以不同的顺序执行事务可能会产生不同的结果,但是不会将数据库置于不一致的状态,因此都是正确的。
一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。并发控制的任务是:保证事务的并发调度是正确的(保证隔离性/可串行化---效果上等价于某个可串行调度),最后不会破坏数据一致性。
封锁是实现并发控制的一个非常重要的技术。所谓封锁就是事务T在对某个数据对象如表,记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他事务不能对此数据对象进行某些操作。
封锁的基本类型有两种:排他锁(Exclusive Locks,简称X锁)和共享锁(Share Locks,简称S锁)
X锁,又称写锁,或排他锁。一个事务对数据对象A进行修改(写)操作之前,给它加上X锁,加上X锁之后,其他任何事务都不能再对A加任何类型的锁,直到X锁被T释放为止。
S锁,又称读锁,或共享锁。一个事务对A进行读取操作之前,给它加上S锁。加上S锁后,其他事务可以对A进行加更多的锁。当然,只能是另外一个S锁,而不能是X锁,直到S锁被T释放为止。
17. 一级封锁协议、二级封锁协议、三级封锁协议、两段锁封锁协议。每个协议何时加锁,何时解锁,各自解决哪些数据不一致。
事务对数据对象加锁时,还需遵循某些规则,包括是否(对读写操作)加锁;何时加锁,何时释放。我们称这些规则为封锁协议。对封锁方式规定不同的规则,就形成了不同级别的封锁协议。不同级别的封锁协议所能达到的系统一致性级别时不同的。
- 一级封锁协议:一级封锁协议的要求为若事务对数据对象A做的是修改操作时,必须首先对其加X锁(第一次READ/WRITE之前),且直到事务结束才能释放X锁(COMMIT或ROLLBACK后),若事务对A做的是读取操作,则没有任何要求(加锁或不加锁都可以)。因为两个事务无法分别修改同一个数据,所有一级封锁协议可解决丢失修改的问题
- 二级封锁协议:再一级封锁协议的基础上,若事务对数据对象A做读取操作,则读操作(READ)前要求对其加S锁,读操作后可在任意时刻释放S锁。利用二级封锁协议除了可以解决丢失修改外,还能解决读脏数据 的问题。因为没有事务能够读取其他事务正在修改,还未提交的数据,所以利用二级封锁协议可解决读脏数据的问题
- 一级封锁协议的基础上,若事务对A做的是读取操作,则要求首先对其加S锁(第一次READ之前),且直到事务结束才能释放S锁(COMMIT或ROLLBACK后)。利用三级封锁协议解决丢失修改,读脏数据,不可重复读的问题。因为没有事务能够修改其他事务正在读取的数据,所以三级封锁协议可解决不可重复读的问题。
封锁协议 | X锁(对写数据) | S锁(对只读数据) | 不丢失修改(写) | 不读"脏"数据(读) | 可重复读(读) |
---|---|---|---|---|---|
一级 | 事务全程加锁 | 不用加锁 | 是 | ||
二级 | 事务全程加锁 | 读前加锁,读完后即可释放 | 是 | 是 | |
三级 | 事务全程加锁 | 事务全程加锁 | 是 | 是 | 是 |
- 两段锁协议:为了保证并发调度的正确性,DBMS的并发控制机制必须提供一定的手段来保证调度是可串行化的。目前DBMS普遍采用两段锁协议来实现并发调度的可串行化,从而保证调度的正确性。
两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。两段锁协议要求,在对任何数据进行读写之前,事务首先要获得对该数据的S或X封锁,释放后不能再读,写该数据。在释放第一个封锁之后,事务不再获得任何其他封锁,即事务分为如下两个阶段。
事务过程 --开始------加锁段-------段分界-------解锁段------->
(1)生长阶段:在这个阶段事务获得所有需要的锁,并且不释放任何封锁
(2)收缩阶段:在这个阶段的事务释放全部的锁,并且也不能再获得任何新锁
若所有事务均遵从两段锁协议,则对这些事务的并发调度一定是可串行化的。反过来,在一个可串行化调度中,不一定所有事务都遵从两段锁协议。因此,所有事务都遵从两段锁协议是可 串行化调度的充分而不是必要条件。
可以证明,若并发执行的所有事务都遵守两段锁协议,则这些事务的任何并发调度策略都是可串行化的。但若并发事务的某个调度是可串行化的,并不意味着这些事务都遵守两段锁协议。
可避免而不可杜绝死锁。
18. 数据库系统的故障种类。对每种故障举例说明。
数据库系统中可能发生各种各样的故障,大致故障可以分为以下4类:
- 事务内部故障:事务内部的故障有的可以 通过事务程序本身发现,有的是非预期的,不能由事务程序处理。例如银行转账事务,这个事务把一笔金额从账户A转给账户B,账户A中的余额不足,则应该不能进行转账,否则可以进行转账。这个对金额的判断就可以在事务的程序代码中进行。如果发现不能转账的情况,对事务进行回滚即可
- 系统故障:系统故障是指造成系统停止运转和重启的故障。例如,硬件错误(CPU故障)、操作系统故障,突然停电等。这样的故障会影响正在允许的所有事务,但不会破坏数据库。
- 介质故障:介质故障是因为某种原因,磁盘上的数据部分或则完全丢失。一般是指相关的人员破坏或者硬件故障。例如,错误的格式化,磁盘坏道,机房失火等。这类故障比前两类故障发生的可能性小很多,但是破坏性最大
- 计算机病毒:计算机病毒是一种人为的故障或破坏,是一些恶作剧者研制的一种计算机程序。这种程序与其他程序不同,它像微生物学所称的病毒一样可以繁殖和传播,并造成对计算机系统包括数据库的危害。
19. 事务日志的作用与内容。登记日志的文件要遵守的原则。
建立冗余数据最常用的技术就是数据转储 和登记日志文件。
(1)日志文件的格式与内容
日志文件是用来记录事务对数据库的更新操作的文件。不同数据库系统采用的日志文件格式完全不一样。概况起来日志文件主要有两种格式:以记录为单位的日志文件和以数据块为单位的日志文件
以记录为单位的日志文件,登记到日志文件的内容包括:
① 登记各个事务开始的日志记录
② 登记各个事务结束的日志记录
③ 登记各个事务中修改操作对象的日志记录(每次修改对应一条记录)
(2)日志文件的作用
日志文件再数据库恢复中起着非常重要的作用。可以用来进行事务故障恢复和系统故障恢复,并协助后备副本进行介质故障恢复。日志文件的具体作用是:事务故障恢复 和系统故障恢复必须用日志文件。
(3)登记日志文件
为保证数据库是可恢复的,登记日志文件必须遵循两条原则:
① 登记的次序严格按并发事务执行的时间次序;
② 必须先写日志文件,后写数据库;