无损联接分解

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

无损联接分解

定义:无损联接分解是将一个关系模式分解成若干个关系模式后,通过自然联接和投影等运算仍能还原到原来的关系模式,则称这种分解为无损联接分解。

可还原

例1:关系模式:成绩(学号,姓名,课程号,课程名,分数)

函数依赖:学号->姓名,课程号->课程名,(学号,课程号)->分数

若将其分解为下面三个关系模式:

成绩(学号,课程号,分数)

学生(学号,姓名)

课程(课程号,课程名)

问,这样的分解是无损分解么?

----

由于:学号->姓名,所以:

成绩(学号,课程号,分数,姓名)

由于:课程号->课程名,所以:

成绩(学号,课程号,分数,姓名,课程名)

所以这个例子是无损分解

例2:设R=ABCDE, R1=AD,R2=BC,R3=BE,R4=CDE, R5=AE, 设函数依赖:

A->C, B->C, C->D, DE->C, CE->A. 判断R分解成

ρ={R1, R2, R3, R4, R5}是否无损联接分解?

解:

这样的题要通过画表的方法来解,首先,原始表:

表1

(A B C D E是关系R的属性, AD, BC, BE, CDE, AE 是分解之后每一个关系对应的属性集) 填表的过程:

当横竖相交的时候,如果在分解关系中存在对应列的单个的属性(譬如第一列第一行AD与A相交的单元格,AD含有A,就填写a1),则填写a下标,下标就是单元格对应所在的列号。否则填写b下标,下标是单元格对应所在的行列号。

填写之后的初始表就是表1所示

2.根据依赖关系修改原始表:

对于依赖关系A->C,看A列中有两行a

1

是相等的(第一行和第五行),所以在

C列中对应的两行也应该相等,但是看到这两行都是b(b

13,b

53

),所以将这个

b都换成b

13

(上面的较小的标)

2

这一列同样的操作,但是看到C这一列中第二行是a

3,那么就将第三行改成a

3

对依赖C→D,C列的1,5行相等,D的1,5行也应该相等,D的第1行有a,

所以b

54换成a

4

;另外C列的2,3,4行也相等,D的2,3,4行也应该相等,D

对于DE→C, DE公共的相等的行是3,4,5行,对应C的3,4,5行也应该相等,

对于CE→A, CE的公共行是3,4,5行,所以将A的3,4,5行也对应相等,因

为A列的第五行含有a

1,所以将3,4行的b

31

,b

41

都换成

a1

最终得到的表格就是:

最后,我们从表格里看到对于DE行来说,都是a,所以得出结论,题中的分解是无损联接分解

********************

无损分解的一个简便的判别方法(适用于分解成2个关系的情况)

譬如:

有关系R=ABC, 依赖关系{A-->B}那么下面哪个是无损分解:

A. {R

1(AB),R

2

(AC)}

B.{R

1(AB),R

3

(BC)}

首先看选项A,R

1∩R

2

=A,R

1

-R

2

=B,R

1

U R

2

-->(R

1

-R

2

).所以它是无损分解

选项B, R

1∩R

2

=B, R

1

-R

2

=A, R

2

-R

1

=C,

所以它不是无损分解

那么这里快速判断无损分解的方法就是

对两个集合先求集合的∩,然后求集合的差(2个集合有两个差的结果)

如果集合的∩-->集合的差(得到差结果的任意一个)成立那么就是无损分解

相关文档
最新文档