第三章节 关系模式设计理论
1、试叙述函数依赖的定义
在关系模式R(U)中,X,Y是U的子集,r是R的任一具体关系,如果对r的任意二个元组t 1 、t 2 ,都有t 1 [X]=t 2 [X] 蕴涵 t 1 [Y]=t 2 [Y] ,那么称 函数依赖 X → Y 在模式R上成立。
2、什么是二个函数依赖集的等价?
如果二个函数依赖集F和G ,满足F+=G+,则称F和G等价。此时,F中每个FD都在G+中,而G中每个 FD也都在F+中。
3、什么是平凡的FD?平凡的FD可根据哪一条推理规则推出?
对于FD X → Y,如果Y X ,那么称X → Y是一个平凡的FD。平凡的FD根据自反性规则就可 推出。
4、为什么要进行关系模式的分解?分解的依据是什么?
由于数据之间存在着联系和约束,在关系模式的关系中可能会存在数据冗余和操作异常现象,因此需把 关系模式进行分解,以消除冗余和异常现象。 分解的依据是数据依赖和模式的标准(范式)。
5、简述多值依赖的定义。
给定关系模式R及其属性或属性组A,B,当且仅当对于一给定的A值,与之相应有一组B值,且这组B 值与关系中的其他属性值无关,则称多值依赖于A,记为A →→ B 。
6、什么是“无损分解”?有什么意义?
设关系模式R相对于FD集F分解成数据模式p,如果对于R中每个关系r 都有r = mp (r) ,那么称p是无 损分解.。 (此处mp (r)为r 在p中每个模式上投影的自然连接)
无损分解,可以保证数据在投影以后通过自然连接仍能恢复回来。
7、什么是“保持FD的分解”?有什么意义?
设关系模式R相对于FD集F分解成数据模式p,如果F在p中每个模式上的投影的并集,仍能逻辑蕴涵 原来的F,那么称分解p保持FD集。
8、关系模式的分解有什么优缺点? 二个优点:
A、消除冗余和异常。
B、在分解了的关系中可存储悬挂元组。 二个缺点:
A、可能分解了的关系不存在泛关系。
B、做查询操作,需做连接操作,增加了查询时间。
第 6 页 共 14 页
第四章节 关系运算
1.为什么要对关系代数表达式进行优化?
关系代数表达式由关系代数操作组合而成。操作中,以笛卡尔积和连接操作最费时间,并生成大量的中间 结果。如果直接按用户书写的顺序执行,很可能效率低。因此在执行前,先由DBMS的查询子系统对关系代 数表达式进行检查,尽可能先执行选择和投影操作,以减少中间结果,并节省时间。
优化工作是由DBMS做的,用户在书写关系代数表达式时不必关心优化这件事,仍以简捷的连接形式书写。
2.为什么关系中元组没有先后顺序?
由于关系定义为元组的集合,而集合中的元素是没有顺序的,因此关系中的元组也就没有先后的顺序( 对用户而言)。这样既能减少逻辑排序,又便于在关系数据库中引进集合论的理论。
3.试叙述两个关系代数表达式等价的定义。
二个关系代数表达式等价是指用同样的关系实例代替二个表达式中相应关系时所得到的结果是一样的。 也就是相同的属性集和相同的元组集,但元组中属性的顺序可能不一致。
4.试述查询优化在关系数据库系统中的重要性和可能性。
关系数据语言具有非过程化的特点。用户只要指出“做什么”,“怎样做”是由系统实现的。这给用户 带来了方便,使对数据的操作简便,但却加重了系统的负担。系统需要自行选择存取路径,而存取路径选择 的好坏是影响查询效率的关键所在。因此查询优化就成了关系系统需要解决的一个重要问题。
利用优化的一般策略和关系代数表达式的等价变换规则,就可以对关系代数表达式进行优化。经过优化 的关系代数表达式可能不是所有等价的关系代数表达式中最优的,但一般情况下,能使查询效率大大提高。
5.为什么关系中不允许有重复元组?
每个关系模式都有一个主键,在关系中主健值是不允许重复的。如果关系中有重复元组,那么其主键值 肯定相等,起不了唯一标识作用,因此关系中不允许有重复元组。
6.笛卡儿积、等值连接、自然连接三者之间有什么区别?
笛卡儿积是一个基本操作,而等值连接和自然连接是组合操作。 设关系R的元数为r , 元组个数为 m ; 关系S的元数为s , 元组个数为n 。
那么 R × S 的元数为 r+ s ,元组个数为 m × n R
7、 元组演算表达式中这些符号的意义 (
、
、=>、∧、∨、┐ )
:全称量词
的元数为 r+ s ,元组个数为小于等于 m × n
S 的元数为小于等于 r+ s ,元组个数为 小于等于m × n
:存在量词
P1=>P2:若P1为真,则P2必然为真 ∧ :交
∨ :并 ┐ :否
第 7 页 共 14 页
第五章节 SQL语言
1.试叙述SQL的关系代数特点和元组演算特点。
SQL的SELECT语句的基本句法来自于关系代数表达式∏L ( QF(R1×…×Rm)) ,并且SQL中有并(UNION)、
交(INTERSECT)和差(EXCEPT)等操作,因此SQL具有关系代数特点。
SELECT语句中出现的基本表名,都应该理解成基本表中的元组变量,而列名应理解成元组分量,这样SQL
就具有了元组演算的特点。
2.SQL语言对于“查询结果是否允许存在重复元组”是如何实现的?
对于SELECT语句中SELECT子句,若用“SELECT DISTINCT” 形式,则查询结果中不允许有重复元组;若
不写成DISTINCT 字样,则查询结果中允许出现重复元组。
3.嵌入式SQL的预处理方式是如何实现的?这种方式有什么重要意义?
预处理方式是先用预处理程序对源程序进行扫描,识别出SQL语句,并处理成主语言的函数调用形式; 然后再用主语言的编译程序把源程序编译成目标程序。
这种方法的重要意义在于不必改动主语言的编译程序,这样,SQL的编译程序和主语言的编译程序 之间就可独立,互不影响。
4.视图的优点是什么?
A、视图对于数据库的重构造提供了一定程序的逻辑独立性。 B、简化了用户观点。
C、视图机制使不同的用户能以不同的方式看待同一数据集合。 D、视图机制对机密文件数据提供了自动的安全保护功能。
5.建索引的目的是什么?是否索引建得越多越好?
建立索引的目的是为了快速查询,建索引的个数不是越多越好,如果数据增、删、改频繁,系统会 花费许多时间来维护索引(因为当关系中的元组进行增、删、改时,索引由系统进行自动修改),解决 的办法是删除不必要的索引。
6.基本表与视图两者的区别和联系是什么?
基本表是实际存在物理存储介质上的实表,而视图是个虚表,它在实际的存储介质上不存在,只是在数 据字典中存储了视图结构的定义,它是由一个或几个基本表或其他视图导出的表。用户对基本表和视图的 查询是相同的,对视图的更新有一些限制。
7.在嵌入式SQL中是如何解决数据库工作单位与源程序工作单位之间的通讯的?
在嵌入式SQL语句中引用主语言程序变量,简称共享变量,完成数据库工作单元与源程序工作单元之间 的通讯。主变量前加“:”,以区别于数据库的字段名,共享变量在使用前应预先用SQL的DECLARE 语句声明。
8.解释游标的概念。
在主语言程序中,SELECT命令在操作数据集合上定义一个游标时,系统将分配一个临时缓冲区保存该元组 数据集合,游标是在程序中设定的一个临时指针,它指向SELECT命令当前要处理的元组。
9.SQL的数据定义主要包括哪些操作?
SQL的数据定义主要包括对SQL模式(即数据库)、基本表、视图和索引的创建和撤消。
10.对视图的更新操作,有些什么限制?
视图中只有“行列子集视图”是允许更新的。如果视图是从单个基本表只使用选择、投影操作导出的,并
第 8 页 共 14 页
且包含了基本表的主键,那么这种视图称为“行列子集视图”。其他方式构成的视图都不允许更新。 另外,允许更新的视图在定义时,必须加上“WITH CHECK OPTION ”短语。
11.在宿主语言的程序中使用SQL语句有哪些规定?
A、分清SQL语句和主语言语句。所有SQL语句必须加上前缀“EXEC SQL”和结束标志“END_EXEC” B、允许嵌入的SQL语句引用主语言的程序变量(引用时加冒号作为前缀),但不允许主语言引用SQL数 据库的表名和列名。
C、SQL的集合处理方式与主语言单记录处理方式之间用游标机制协调。
12.SQL的集合处理方式与主语言单记录处理方式之间如何协调? SQL和主语言之间用游标机制协调。 游标有二层含义:游标关系和游标指针。
游标是与某一查询结果相联系的符号名。实际上把查询结果看成一个“文件”。如同OS一样,对 “文件”的操作有定义、打开、推进、关闭等四个。游标推进相当于“读”操作,读一个元组值到共享 变量中,让主语言的程序去处理。
13.嵌入式SQL的DML语句何时不必涉及到游标?何时必须涉及到游标? 不必涉及到游标的DML语句有下面二种情况:
A、insert/delete/update语句,只要加上前缀和结束标志,就能嵌入在主语言程序中使用。 B、对于select 语句,如果已知查询结果肯定是单元组,也可不必涉及游标操作。 涉及到游标的DML语句有下面二种情况:
A、当select 语句查询结果是多个元组时,必须用游标机制把多个元组一次一个地传递给主程序处理。 B、对游标指向元组进行修改或删除操作时,也涉及到游标。
14.为什么将SQL中视图称为“虚表”?
在SQL中创建一个视图时,系统只是将视图的定义存放在数据字典中,并不存储视图对应的数据,在用户 使用视图时才去求对应的数据。因此,我们将视图称为“虚表”。这样处理的目的是为了节约存储空间,因 为视图对应的数据都可从相应的基本表中获得。
15.所有的视图是否都可以更新?为什么?
由于视图是不实际存储数据的虚表,因此对视图的更新最终要转换为对基本表的更新。 在SQL中,允许更新的视图在定义时,必须加上“WITH CHECK OPTION”子句。
16.预处理方式对于嵌入式SQL的实现有什么重要意义?
预处理方式是先用预处理程序对程序进行扫描,识别SQL语句,并处理主语言的函数调用形式;然后再 用主语言的编译程序把源程序编译成目标程序。
17.试说明SQL语言支持的关系数据库三级结构。
SQL语言支持的数据库体系结构基本上也是三级结构,但术语与传统的关系模型术语有所不同。在SQL中 ,关系模式称为基本表,存储模式称为“存储文件”,子模式称为“视图”,元组称为“行”,属性称为“列”。
18.实现嵌入式SQL需要解决的关键技术问题是什么?
A、嵌入式SQL语言与宿主语言的识别问题。在嵌入式SQL语句前加“EXEC SQL”,在嵌入式SQL语句后
加“END_EXEC“
B、数据交换。共享变量和游标来实现两种语言的匹配问题。
第 9 页 共 14 页
第六章节 数据库管理
1.什么是封锁机制?
封锁是实现并发控制的一个非常重要的技术。所谓封锁就是事务T在对某个数据对象如表、记录等操作 之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在T释放它的锁之前 ,其他的事务不能更新此数据对象。
2.什么是数据库的安全性?什么是数据的完整性?两者有什么区别和联系?
数据库的安全性是指保护数据库,防止不合法、未经授权的使用,以免数据的泄露、非法更改和破坏。 数据库的完整性是指避免非法的不合语义的错误数据的输入和输出,造成无效操作和错误结果。
数据库的完整性是指尽可能避免无意滥用;数据库的安全性是指尽可能避免恶意滥用数据库数据。当然 完整性和安全性是密切相关的。特别是从系统实现方法来看,某一种机制常常既可以用于安全性保护也可用 于完整性保护。
3.什么叫封锁粒度?封锁粒度的大小与并发性、系统开销之间的关系如何?
封锁的数据目标可以是这样一些逻辑单元:数据库、表、记录、字段等,封锁数据目标的大小叫封锁粒 度。封锁的粒度小,并发度高,但封锁机构复杂,系统开销大。反之,封锁的粒度大,并发度小,但封锁机 构简单,系统开销小。
4.简述数据库的典型恢复策略。
数据库的恢复,意味着要把数据库恢复到最近一次故障前的一致性状态。典型的数据恢复策略为: A、周期性地对整个数据库进行复制或转储、建立日志文件。 B、一旦数据库发生故障,则分二种情况处理:
a)如果数据库遇到灾难性故障,就必须装入最近一次拷贝的数据库备份到新的磁盘,然后利用日志库执
行“重做”已提交的事务,把数据库恢复到故障前的状态。
b)如果数据库未遭到物理性破坏,只是某些数据不正确,只需利用日志库“撤销”所有不可靠的修改, 再利用日志库执行“重做”已提交的、但对数据库的更新可能还留在内存缓冲区的事务,就可以把数据 库恢复到正确的状态。
5.试解释权限的转授和回收。
用户对自己建立的基本表和视图拥有全部的操作权限,而且可用GRANT语句把其中的部分或全部的权限 授予别的用户。被授予的用户如果有“继续授权”(WITH GRANT OPTION子句)的许可,还可以把获得的权 限对其他用户继续授权。 可用REVOKE 语句收回所有授予出去的权限。
第 10 页 共 14 页