分解的目的是减少冗余,从而消除存储异常。仅考虑函数依赖,不达到BCNF不能完全避免冗余,因此分解后的关系模式,如果可能的话,应该达到BCNF。
函数依赖反映了数据之间的一种约束。如果分解保持函数依赖,这些约束可以比较有效地在分解后的一个关系中进行验证,否则有些约束需要将多个关系连接才能验证。因此,分解要尽可能保持函数依赖。
在某些情况下,BCNF和保持函数依赖这两个目标不可兼得,因为有些关系模式不存在保持函数依赖的BCNF分解。在这种情况下,我们必须在BCNF和保持函数依赖之间进行取舍。
6.23 在关系数据库设计时,我们可能选择非BCNF设计的原因是有些关系模式不存在保持函数依赖的BCNF分解。当函数依赖是重要的时,为了使的函数依赖的验证更加有效,我们需要选择保持函数依赖的分解,而放弃BCNF.
6.24 在关系数据库设计时,没有理由设计一个属于2NF,但不属于更高范式的关系模式。因为关系模式达到2NF,但不属于更高的范式将存在明显的数据冗余,进而导致存储异常。另一方面,对于任意2NF,我们总可以通过模式分解将它转换成更高的关系模式,这些关系模式与原来的关系模式反映相同的现实世界(分解具有无损连接性),并且能够消除或减少数据冗余。
第7章 数据库设计
部分习题参考答案 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 7.10 7.11 7.12 7.13 7.14 7.15 7.16
数据库设计人员应具备哪些方面的知识? 简述数据库设计的步骤。 什么是数据库设计? 简述需求分析的步骤。
简述数据字典的内容及其作用。 概念数据库设计使用那些策略?
简述概念结构设计的基本方法和步骤。 什么是数据库的逻辑设计?简述其步骤。 在合并局部E-R图中,如何消除各种冲突? E-R图向关系模型转换的原则是什么?
简述物理数据库设计的任务、目标和步骤。 在数据库的物理设计中如何选择索引方法? 试述聚簇设计的原则。
为什么要对数据库进行重组和重构? DBA的作用是什么?
考察自己学校的学生成绩管理方法,编写出建立成绩管理的可行性分析报告、需求分析说明书、系统的概念结构设计和逻辑结构设计。
7.17 一个图书借阅管理数据库有以下需求,请设计该数据库的E-R模式和关系模式。
(1) 希望能查询书库中现有书籍的种类、数量和存放位置。这里假设各种书籍均由书
号惟一标识。 (2) 希望能查询书籍的借还情况信息,包括借书人单位、借书人单位电话、姓名、借
书证号、借书日期、还书日期。这里规定,每个人最多可以借6本书,借书证是读者的惟一标识符。 (3) 希望通过查询出版社的名称、电话、邮编、通讯地址等信息能向出版社订购有关
书籍。这里假设一个出版社可以出版多种图书,同一书名的书仅由一个出版社出版,出版社名称具有惟一性。
第8章 查询处理与优化
部分习题参考答案
8.1 对于相同的查询,不同的查询执行计划的时间开销可能相差几个数量级。这意味好的执行计划可能是可行的,而差的执行计划在实践上是不可行。因此,即使查询只执行一次,查询优化也是必须的。
在非关系系统中,用户使用过程化的语言表达查询要求,执行何种操作,以及操作的序列都是由用户来决定的。系统为用户提供选择存取路径的手段,而用户必须了解存取路径,为自己的查询选择合适的存取路径。如果用户做了不当的选择, 系统很难加以改进。关系数据库语言(如SQL)是非过程化语言;为了表达查询,用户只需要说明做什么(查询什么、在什么关系上查询和查询结果满足的条件),而不必说明怎么做。这就为查询优化提供了更大的空间,使得系统可以分析查询语义,选择最佳的查询处理方案。
8.2 系统进行查询优化的优点是:系统进行查询优化减轻了用户选择存取路径的负担,使得用户可以将注意力放在如何正确地表达查询请求上,而不必考虑如何最有效地表达查询。此外,系统进行查询优化还可以比用户做得更好,因为
(1) 优化器可以从数据字典中获取许多统计信息,如每个关系的当前元组数目、每个属性上的不同值个数、有哪些索引等。这些信息对于选择高效的执行策略是重要的,但是用户难以获得这些信息。
(2) 当数据库的统计信息改变时,可能需要改变执行策略。优化器可以自动对查询重新进行优化,以选择相适应的执行策略。在非关系系统中必须重写程序,而重写程序在实际应用中往往是不太可能的。
(3) 优化器可以更全面地考虑,考察数百种不同的执行计划,从中确定最佳的执行计划。而用户一般只能考虑有限的几种可能性(很难超过三、四种)。
(4) 优化器中包括了很多复杂的优化技术,这些优化技术往往只有最好的程序员才能掌握。系统的自动优化相当于使得所有人都拥有这些优化技术。
8.3 代数优化的启发式规则包括:选择尽可能先做、投影机可能先做和尽量避免计算笛卡尔积等。
选择尽可能先做是最重要的启发式规则。这是因为尽管通常一个关系很大,但是满足某种选择条件的元组的数量却相对较小,并且选择条件越强,满足条件的元组越少。尽早进行选择能够大幅度减少下一步参与运算的元组数目,使得其后的运算可以更加有效的进行。
8.4 由于索引是非聚簇索引,如果对于连接属性的相同值,内层关系存在多个元组,这些元组可能散布在多个物理块,则对于外层关系的每个元组,我们可能需要访问内层关系的多个块。因此,索引嵌套循环的效率不高。
8.5 如果关系r和s在公共属性上无序,也没有索引。如果内存足够大,就I/O开销而言,计算r s的最有效方法是:将较小的关系整个读入内存,逐块读入较大的关系,使用较大的关系作为外层关系,执行嵌套循环连接。此时,I/O操作数为br + bs,而内存需求为min(br, bs) + 2页,其中br和bs分别为关系r和s所占用的块数。
8.6 假设关系r和s的公共属性JoinAttrs是r的主码、s的外码,并且r和s在连接属性上是
有序的(假设为递增序)。用排序-归并方法计算r s的伪代码如下:
指针pr和ps分别指向r和s的第一个元组; while (pr?null and ps?null) do { tr? pr指向的元组; ts? ps指向的元组;
while (ps?null and ts[JoinAttrs]< tr[JoinAttrs]) do 让ps指向s的下一个元组; while (ps?null and ts[JoinAttrs]= tr[JoinAttrs]) do {
把tr.ts添加到结果中;
让ps指向s的下一个元组;
}
if (pr?nulll) then
让pr指向r的下一个元组; }
8.7 可以采用排序或散列方法来消除重复元组。
排序时等值元组相互邻近,删除其他副本,只留一个元组副本即可。如果使用外部归并排序,则可以直接在归并时删除重复元组。
散列时,重复元组会分到同一桶中。可以在元组加入桶中时检查元组是否已在桶中,无须加入已在桶中的元组。 8.8
(1) 使用散列方法实现集合运算r?s的算法
初始:结果关系为空;
使用相同的散列函数H对两个关系r和s进行划分,产生r0, r1, ..., rn和s0, s1, ..., sn; for (i=1; i<=n; i++) do {
对ri建立内存散列索引; for (si中的每个元组ts) do
if (ts不在ri的散列索引中) then 将ts加入到ri的散列索引中;
将ri的内存散列索引中的元组加入结果关系中; }
设关系r和s分别占br和bs块。使用散列函数H对两个关系r和s进行划分,需要读入和写出br+bs块。读入每个ri建立它的内存散列索引,并将si的不在ri的散列索引中的元组插入需要读入br+bs块。整个算法需要的I/O量为3(br+bs)块。
如果内存足够大,可以将关系r和s读入到内存,I/O减少到br+bs块。
(2) 使用散列方法实现集合运算r?s的算法
初始:结果关系为空;
使用相同的散列函数H对两个关系r和s进行划分,产生r0, r1, ..., rn和s0, s1, ..., sn; for (i=1; i<=n; i++) do {
对ri建立内存散列索引; for (si中的每个元组ts) do
if (ts在ri的散列索引中) then
将ts加入到结果关系中; }
使用散列方法实现集合运算r?s的算法
初始:结果关系为空;
使用相同的散列函数H对两个关系r和s进行划分,产生r0, r1, ..., rn和s0, s1, ..., sn; for (i=1; i<=n; i++) do {
对ri建立内存散列索引; for (si中的每个元组ts) do
if (ts在ri的散列索引中) then 将ts从ri的散列索引中删除;
将ri的内存散列索引中的元组加入结果关系中; } 8.9
(1) 图8.2的语法树见(a),分解合取选择后的语法树在(b)中。
选择条件Pno=?P001?只涉及关系SP,因此可以将对应的选择下移,结果见(c)。 将选择与其下的笛卡尔积转换成自然连接,结果见(d)。
引入新的投影,去掉其后运算不需要的属性:关系Suppliers的属性Sno和Sname是其后需要的,其余属性不需要。使用条件Pno=?P001? 选择后,关系SP的属性Sno是需要的,其余属性不需要。引入投影后的结果在(e)中。
?Sname
?Suppliers.Sno=SP.Sno ? Pno=?P001?
?
Suppliers
SP
?Sname
?Suppliers.Sno=SP.Sno ? Pno=?P001?
?
Suppliers
SP
?Sname
?Suppliers.Sno=SP.Sno
?
Suppliers
? Pno=?P001?
SP
(a) (b) (c)
?Sname
?Sname ?Sname
流水线
Suppliers
? Pno=?P001?
SP
?Sno,Sname ?Sno
Suppliers
?Sno,Sname ?Sno
流水线
Suppliers
? Pno=?P001?
SP
? Pno=?P001?
SP
(d)
(e)
图8.1 习题8.9的初始语法树及其优化
(f)
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库数据库原理教程习题答案(全)(8)在线全文阅读。
相关推荐: