数据字典(DD):存储三级结构的描述;
索引文件:为提高查询速度而设置的逻辑排序手段;
统计数据组织:存储DBS运行时统计分析数据。
该查询初始的关系代数表达式的语法树
优化后的语法树
NOTICE:有多种写法,比如联接查询写法:SELECTSNAMEFROMS,SC,CWHERESEX=‘F’ANDSC.S#=S.S#ANDSC.C#=C.C#ANDTEACHER='LIU'但上一种写法更好一些。
要从语义上分解:(1)选择课程的课程号与课程名,不存在不选这门课的同学。其中,“不选这门课的同学”可以表示为:
SELECT*
FROMS
WHERES#NOTIN
(SELECT*
FROMSC
WHERESC.C#=C.C#)
或者
WHERENOTEXISTS
WHERES.S#=C.S#AND
SC.C#=C.C#)
4.1名词解释
所有属性相互依赖时,函数依赖最多。
4.3建立关于系、学生、班级、社团等信息的一个关系数据库,一个系有若干个专业,每个专业每年只招一个班,每个班有若干个学生,一个系的学生住在同一宿舍区,每个学生可以参加若干个社团,每个社团有若干学生。描述学生的属性有:学号、姓名、出生年月、系名、班级号、宿舍区。描述班级的属性有:班级号、专业名、系名、人数、入校年份。描述系的属性有:系名、系号、系办公地点、人数。描述社团的属性有:社团名、成立年份、地点、人数、学生参加某社团的年份。请给出关系模式,写出每个关系模式的最小函数依赖集,指出是否存在传递函数依赖,对于函数依赖左部是多属性的情况,讨论函数依赖是完全函数依赖还是部分函数依赖。指出各关系的候选键、外部键,有没有全键存在各关系模式如下:学生(学号,姓名,出生年月,系名,班级号,宿舍区)班级(班级号,专业名,系名,人数,入校年份)系(系名,系号,系办公地点,人数)社团(社团名,成立年份,地点,人数)
加入社团(社团名,学号,学生参加社团的年份)学生(学号,姓名,出生年月,系名,班级号,宿舍区)
●“学生”关系的最小函数依赖集为:Fmin={学号→姓名,学号→班级号,学号→出生年月,学号→系名,系名→宿舍区}●以上关系模式中存在传递函数依赖,如:学号→系名,系名→宿舍区●候选键是学号,外部键是班级号,系名。notice:在关系模式中,如果Y→X,X→A,且XY(X不决定Y),A不属于X,那么称Y→A是传递依赖。
班级(班级号,专业名,系名,人数,入校年份)
●“班级”关系的最小函数依赖集为:Fmin={(系名,专业名)→班级号,班级号→人数,班级号→入校年份,班级号→系名,班级号→专业名}(假设没有相同的系,不同系中专业名可以相同)●以上关系模式中不存在传递函数依赖。●“(系名,专业名)→班级号”是完全函数依赖。●候选键是(系名,专业名),班级号,外部键是系名。系(系名,系号,系办公地点,人数)
●“系”关系的最小函数依赖集为:Fmin={系号→系名,系名→系办公地点,系名→人数,系名→系号}●以上关系模式中不存在传递函数依赖●候选键是系名,系号社团(社团名,成立年份,地点,人数)
●“社团”关系的最小函数依赖集为:Fmin={社团名→成立年份,社团名→地点,社团名→人数)●以上关系模式中不存在传递函数依赖。●候选键是社团名
加入社团(社团名,学号,学生参加社团的年份)
●“加入社团”关系的最小函数依赖集为:Fmin={(社团名,学号)→学生参加社团的年份)●“(社团名,学号)→学生参加社团的年份”是完全函数依赖。
●以上关系模式中不存在传递函数依赖。●候选键是(社团名,学号)。
4.4对函数依赖X→Y的定义加以扩充,X和Y可以为空属性集,用φ表示,那么X→φ,φ→Y,φ→φ的含义是什么根据函数依赖的定义,以上三个表达式的含义为:(1)一个关系模式R(U)中,X,Y是U的子集,r是R的任一具体关系,如果对r的任意两个元组t1,t2,由t1[X]=t2[X]必有t1[φ]=t2[φ]。即X→φ表示空属性函数依赖于X。这是任何关系中都存在的。(2)φ→Y表示Y函数依赖于空属性。由此可知该关系中所有元组中Y属性的值均相同。(3)φ→φ表示空属性函数依赖于空属性。这也是任何关系中都存在的。4.5已知关系模式R(ABC),F={A→C,B→C},求F+。
可以直接通过自反律、增广律、传递律加以推广:F+={φ→φ,A→φ,B→φ,C→φ,A→C,B→C,AB→φ,AB→A,AB→B,AB→C,AB→BC,AB→AB,AB→ABC,BC→φ,BC→C,BC→B,BC→BC,AC→φ,AC→C,AC→A,AC→AC,ABC→φ,ABC→A,ABC→B,ABC→C,ABC→BC,ABC→AB,ABC→ABC}
4.6试分析下列分解是否具有无损联接和保持函数依赖的特点:(1)设R(ABC),F1={A→B}在R上成立,ρ1={AB,AC}。首先,检查是否具有无损联接特点:第1种解法--算法4.2:
A
B
C
AB
a1
a2
b13
AC
b22
a3
(1)构造表
(2)根据A→B进行处理
结果第二行全是a行,因此分解是无损联接分解。第2种解法:(定理4.8)设R1=AB,R2=ACR1∩R2=AR2-R1=B∵A→B,∴该分解是无损联接分解。然后,检查分解是否保持函数依赖πR1(F1)={A→B,以及按自反率推出的一些函数依赖}πR2(F1)={按自反率推出的一些函数依赖}F1被πR1(F1)所蕴涵,∴所以该分解保持函数依赖。(2)设R(ABC),F2={A→C,B→C}在R上成立,ρ2={AB,AC}首先,检查是否具有无损联接特点:第1种解法(略)第2种解法:(定理4.8)设R1=AB,R2=ACR1∩R2=AR2-R1=C∵A→C,∴该分解是无损联接分解。然后,检查分解是否保持函数依赖πR1(F2)={按自反率推出的一些函数依赖}πR2(F2)={A→C,以及按自反率推出的一些函数依赖}∵F1中的B→C没有被蕴涵,所以该分解没有保持函数依赖。(3)设R(ABC),F3={A→B},在R上成立,ρ3={AB,BC}.首先,检查是否具有无损联接特点:第1种解法:
BC
b21
D
b14
b24
AD
b32
b33
a4
(2)根据A→B,B→C,A→D,D→C进行处理
每一行都是a,ρ相对于F是无损联接分解。(3)πAB(F)∪πAC(F)∪πAD(F)={A→B,A→C,A→D},没有满足B→C,D→C函数依赖,因此ρ相对于F的这个分解不保持函数依赖。4.8设R=ABCD,R上的F={A→C,D→C,BD→A},试证明ρ={AB,ACD,BCD}相对于F不是无损联接分解。根据算法4.2
ACD
BCD
b31
(2)根据A→C,D→C,BD→A进行处理
没有一行都是a,所以,ρ相对于F不是无损联接分解。4.9设R=ABCD,R上的F={A→B,B→C,D→B},把R分解成BCNF模式集。(1)若首先把R分解成{ACD,BD},试求F在这两个模式上的投影。(2)ACD和BD是BCNF吗如果不是,请进一步分解。(1)πACD(F)={A→C}πBD(F)={D→B}(2)因为根据BCNF的定义,要求关系模式是第一范式,且每个属性都不传递依赖于R的侯选键。BCD中(A,D)为候选键,可是(A,D)→A,A→C,所以它不是BCNF模式。它可进一步分解为:{AC,DC},此时AC,DC均为BCNF模式。BD是BCNF,因为R2(BD)是第一范式,且每个属性都不传递依赖于D(候选键),所以它是BCNF模式。4.10设R=ABCD,ρ={AB,BC,CD}。F1={A→B,B→C};F2={B→C,C→D};(1)如果F1是R上的函数依赖集,此时ρ是无损联接分解吗若不是,试举出反例。(2)如果F2是R上的函数依赖集呢(1)不是无损联接。可由算法4.2判断或由定理4.8判断。根据算法4.2
CD
(2)根据A→B,B→C进行处理
只要保证每个属性值不可分割,以上范式即为1NF。候选键为(E#,Business,Phone#)
转换成2NF关系(消除局部依赖):Em_Dep(E#,D#,Manager_E#,Office#,Area,J#,Budget)对应F={D#→Manager_E#,E#→Office#,J#→Budget,E#→J#,Office#→Area,Office→D#}History(E#,Business,History)对应F={(E#,Business)→Sa_History}Phone(Phone#,Office#)对应F={Phone#→Office#}转换成3NF关系(消除非主属性对侯选键的传递依赖):Department(D#,Manager_E#)Office(Office#,Area,D#)Emproee(E#,J#,Office#)History(E#,Business,History)Phone(Phone#,Office#)Project(J#,Budget)
注意:由于对题意理解的不同,可能答案不唯一。4.13设关系模式R(ABC)上有一个多值依赖A→→B。如果已知R的当前关系中存在三组(ab1c1)、(ab2c2)和(ab3c3),那么这个关系中至少还应存在哪些元组从多值依赖的定义可以得出,至少应存在下列元组:(ab1c2)、(ab1c3)、(ab2c1)、(ab2c3)、(ab3c1)、(ab3c2)
(1)DBMS可处理的模式;
(2)子模式;
(3)应用程序设计指南;
约束形式
说明对象
激活条件
是否保证一致性
基于属性的检查
只对一个属性值加以约束
插入或修改属性值时
不一定
基于元组的检查
对单个关系的元组值加以约束
在插入或修改元组时
断言
多个关系或聚合操作
任何变动
保证
7.12试述基于半联接查询的优化策略。假设场地1的关系R和场地2的关系S在属性R.A和S.B上做联接操作,为了减少数据传输量,采用半联接方法,表示方法如下:
8.3什么是对象联系图?图中,椭园、小圆圈、单箭头(→),双箭头(→→),双线箭头(=>),双向箭头(←→)所表示的含义。答:椭圆表示对象,小圆圈表示属性是基本数据类型,单箭头(→)表示函数值是单值,双箭头(→→)表示函数值是多值,双线箭头(=>)是泛化边,表示泛化/细化联系,双向箭头(←→)表示两个函数互逆。
8.5子表和超表应满足哪两个一致性要求?
子表和超表应满足下列两个一致性要求:(1)超表中每个元组最多可以与每个子表中的一个元组对应。(2)子表中每个元组在超表中恰有一个元组对应,并在继承的属性上有相同的值。
8.6继承性体现了数据间什么联系?试举例说明。
继承是"isa"(细化/泛化)联系。比如卡车是车的子类,“卡车”“isa”“车”“卡车”和“车”之间存在继承性。
另一条途径是在OOPLC++基础上进行扩充,能操作持久数据,处理数据库,形成持久化C++系统,即OODBS。但较难提供对说明性查询的支持,因此推广使用难度较大。