复习要点-无损分解
重点:理解无损分解、损失分解、寄生元组、悬挂元组、Chase过程、两个无损分解相关的定理
无损分解和损失分解
设R是一个关系模式,F是R上的一个FD集,R分解成数据库模式ρ={R1,...,Rk}。如果对R中满足F的每一个关系r,都有r=【r在R1上投影】自然连接【r在R1上投影】...自然连接【r在Rk上投影】
那么称分解ρ相对于F是“无损连接分解”(LOSSLESS JOINDECOMPOSITION),简称无损分解,否则称为“损失分解”(LOSSY DECOMPOSITION)
寄生元组
在泛关系模式R分解成数据库模式ρ={R1,...,Rk}时,泛关系r在ρ的每一模式Ri(1<=i<=n)上投影后再连接起来,比原来r中多出来的元组,成为“寄生元组”(Spurious Tuple)
理解 - 实际上,寄生元组表示着错误的信息。寄生元组也就是之前提到的额外元组,寄生元组标识的是错误的信息。
悬挂元组
在无泛关系假设时,对两个关系进行自然连接中被丢失的元组称为悬挂元组。
理解 - 悬挂元组是造成两个关系不存在泛关系的原因。举例来说,课程表(课程号,课程名,授课教师号),教师表(教师号,教师名,教师职称),如果有一条新进学校的教师记录,该教师还未教授任何课程,即在教师表中存在一条新来老师的记录,而在课程表中没有和这个教师相关的记录,那么这条教师记录就是悬挂元组,因为进行自然连接后会丢失这条新来老师的记录。
模式分解的优点
1、消除数据冗余和操作异常现象
2、在分解了得数据库中可以存储悬挂元组,而在泛关系中无法存储
模式分解的缺点
1、检索操作需要做笛卡尔积/连接操作,要付出时间代价
2、在有泛关系假设时,可能产生寄生元组,即损失了信息;在无泛关系假设时,数据库中可能存在悬挂元组,就由可能不存在泛关系。
无损分解的测试方法
CHASE过程和两条定理的运用
1、CHASE过程
描述看起来很累,建议看例子,主要分成两个步骤:初始化表格及修正表格,最后进行判断。结合下面的理解
理解 - 在CHASE过程中,如果把b改成a,则表示可以从其他模式和已知的FD使得该模式增加一个属性。如果改成另一个bij,表示模式的响应关系中虽然还没有该属性值,但其值应与其他关系模式中的值相等。
当最后一张表格中存在一行全a时,这行标识的模式中可以包含R的所有属性,也就是回到原来的表格,所以这个分解是无损分解(无损,即可通过分解的关系模式和FD无损的还原出原先的关系模式)
当最后一张表格中不存在全a行时,也就是回不到原来的表格,所以这个分解就是有损分解。
可以结合希赛的视频教程加深理解。
CHASE过程是出无损分解题目的典型的考点
2、两条定理
定理4.6
设ρ={R1,R2}是关系模式R的一个分解,F是R上成立的FD集,那么分解ρ相对于F是无损分解的充分必要条件是:
(R1∩R2)->(R1-R2)或(R1∩R2)->(R2-R1),书上未给出证明过程,下证:
先证必要性:即证:若(R1∩R2)->(R1-R2)或(R1∩R2)->(R2-R1),则分解ρ相对于F是无损分解
不妨设(R1∩R2)->(R1-R2)
根据CHASE过程,画初始表格
????R1∩R2??? R1-R2 R2-R1
R1 a1? ???? a2? ???? b13
R2 a1? ???? b22??? ???? a3
修正表格
??? ??R1∩R2??? R1-R2 R2-R1
R1 a1? ???? a2? ???? b13
R2 a1? ???? a2? ???? a3
最后一行为全a,所以得证分解ρ相对于F是无损分解
再证充分性:即证:若分解ρ相对于F是无损分解,那么(R1∩R2)->(R1-R2)或(R1∩R2)->(R2-R1)
不妨设:R1∩R2不能函数决定R1-R2
????R1∩R2??? R1-R2 R2-R1
R1 a1? ?????a2? ???? b13
R2 a1? ???? b22??? ????? a3
?
?
在表格修正的过程中,b22无法改成a2,造成没有一行全a,即不是无损分解,与已知条件矛盾,故得证。
理解 - 这个定理使用具有一定局限性,主要体现在,这个定理只能用于判断从一个关系模式分解成两个关系模式的一种判断,分解成三个关系模式即无法使用该定理,其次,可以从键的角度来理解这条定理,如果分解成R1和R2的公共属性是X->Y中的X,即起决定性因素的那个,那么这次分解就是无损分解,往往,在多数情况下,起决定性因素的即是键,而通过键能把模式合并还原成最先的模式R。
定理4.7
如果FD X->Y在模式R上成立,且X∩Y=空集,那么R分解成ρ={R-Y,XY}是无损分解。
?