数据库系统原理复习整理(4)

目录

一、最小依赖集Fmin

1.概念

2.求最小函数依赖集步骤

二、模式分解

1.概念

2.判断是否为无损连接分解

三、例题

1.例题1

1.1题目

1.2解题思路

2.例题2

2.1题目

2.2解题思路


一、最小依赖集Fmin

1.概念

最小依赖集:在给定一组依赖关系中,找到最小的一个子集,使得在这个子集中不存在多余或冗余的依赖关系。简而言之,最小依赖集是数据之间必要的依赖关系的最小集合。

2.求最小函数依赖集步骤

1)拆右边(将函数依赖箭头右侧化为单属性)

2)拆左边(对于箭头左侧不是单属性的,尝试能否减少左侧属性,尽量使左侧变为单属性)

3)去掉多余的(对每个函数依赖分别尝试去除,观察是否影响左侧属性的闭包,如果不影响则去掉)

二、模式分解

1.概念

模式分解:把一个关系模式分解成若干个关系模式的过程称为关系模式的分解。(即把一个表分解成若干个表)

无损连接分解:分解后的若干表做自然连接,内容是否与原来一致,如果一致,则为无损连接分解。

保持函数依赖分解:关系模式的函数依赖集在分解后仍然保持不变。

2.判断是否为无损连接分解

1)如果分解后的关系模式是形如{U1,U2}的(分解成了两个表),公式判断:

U1 \bigcap U2 \rightarrow U1 - U2  或者 U1 \bigcap U2 \rightarrow U2 - U1,如果符合两个公式中任意一个,则为无损连接分解,否则为有损连接分解。

2)其他形式(分解成了三个表及以上):

(1)先求最小函数依赖集,后将左侧属性相同的函数依赖合并;

(2)建表(表格的行是分解成的表(R1,R2,...),列为属性(A,B,C,...)),每行中Rn包含的属性对应表格标为a,不包含的属性对应表格标为b;

(3)根据最小函数依赖集依次对表格进行改变,比如A->B,即为将A列中标为a的行,对应的B列中的内容标为a,将A列中标为b的行,对应的B列中的内容标为b,这样对最小函数依赖集的所有函数依赖经过一次全部扫描;

(4)在某次更改后,若出现某一行全部为a的情况,则终止,判断其为无损连接分解;

(5)若全部扫描后未出现全部为a的情况,重复步骤(3),直到前一次扫描和后一次扫描表格无任何变化时,停止扫描,判断其不是无损连接分解。

三、例题

1.例题1

1.1题目

F={A->B,A->C,A->F,AC->D,C->D,C->E,E->G}

1)求候选键

2)判断该关系模式符合第几范式

3)求最小依赖集Fmin

1.2解题思路

1)首先判断所有函数依赖中:

只在箭头左边出现的:A

只在箭头右边出现的:B,D,F,G

箭头两边都出现过的:C,E

A{_{F}}^{+}=ABCDEFG=U(这里求闭包过程省略,根据题中函数依赖即可,具体方法可查看https://blog.csdn.net/m0_65985318/article/details/136572045

所以候选键为A

2)因为A为候选键,所以A->D,因为AC->D,所以没有消除非主属性对码的部分函数依赖,不符合二范式,符合第一范式。

3)F={A->B,A->C,A->F,AC->D,C->D,C->E,E->G}

第一步:拆右边(例题中所有函数依赖箭头右边均为单属性,所以不用拆,直接第二步)

第二步:拆左边

左边不为单属性的有:AC->D

因为候选键为A,所以一定有A->D(候选键的闭包是全集,全集中一定包含D,所以A一定能推出D),所以可以用A->D来代替AC->D(C属性在这个函数依赖中多余)

所以F={A->B,A->C,A->F,A->D,C->D,C->E,E->G}(函数依赖集更新,后续步骤中用更新的F)

第三步:去掉多余的(从左到右依次尝试)

(1)删除A->B,F1={A->C,A->F,A->D,C->D,C->E,E->G}

因为删除的函数依赖集A->B左侧是A,删掉前,因为A是候选键,A{_{F}}^{+}=ABCDEFG=U,所以我们要求删掉后A的闭包还是不是全集,或者说其实要判断的就是删掉A->B后,B还在不在A的闭包里,A还能不能推出B来

如果B还在A的闭包,则说明A->B的函数依赖是多余的,如果不在,则说明A的闭包发生了变化,A->B的函数依赖是必要的。

A{_{F1}}^{+}=ACDEFG\neq A{_{F}}^{+},B不属于A{_{F1}}^{+},所以不能删除;

(2)删除A->C,F2={A->B,A->F,A->D,C->D,C->E,E->G}(因为刚才A->B不能删除,所以要将放回来,将A->C删除)

A{_{F2}}^{+}=ABDF\neq A{_{F}}^{+},C不属于A{_{F2}}^{+},不能删除;

(3)删除A->F,F3={A->B,A->C,A->D,C->D,C->E,E->G}

A{_{F3}}^{+}=ABCDEG\neq A{_{F}}^{+},F不属于A{_{F3}}^{+},不能删除;

(4)删除A->D,F4={A->B,A->C,A->F,C->D,C->E,E->G}

A{_{F4}}^{+}=ABCDEFG = A{_{F}}^{+},D属于A{_{F4}}^{+},能删除;

(5)删除C->D,F5={A->B,A->C,A->F,C->E,E->G}(这里刚才A->D能删除,所以函数依赖集更新了,不以F为参照,而是以F4为参照删除C->D)

C{_{F5}}^{+}=CEG,D不属于C{_{F5}}^{+},不能删除;

(6)删除C->E,F6={A->B,A->C,A->F,C->D,E->G}

C{_{F6}}^{+}=CD,E不属于C{_{F6}}^{+},不能删除;

(7)删除E->G,F7={A->B,A->C,A->F,C->D,C->E}

E{_{F7}}^{+}=E,G不属于C{_{F7}}^{+},不能删除;

所以最终Fmin={A->B,A->C,A->F,C->D,C->E,E->G}

2.例题2

2.1题目

F={A->BD,A->C,B->C,AD->E}

1)求候选键

2)求满足第几范式

3)模式分解后分解为两个表R1(ABC),R2(BCD),该分解是否为无损连接分解

4)模式分解后分解为三个表ρ={R1(ABD),R2(ADE),R3(ABC)},判断ρ是否为无损连接分解

2.2解题思路

1)只左:A,只右:C,E,左右都有:B,D

因为A->BD,A->C,所以A_{F}(1)=ABCD,又因为AD->E,所以A^{F}(2)=ABCDE=U,所以候选键为:A

2)因为A->BD,所以存在A->B,因为B->C,所以存在非主属性对码的传递函数依赖,不满足3NF;又因为A是候选键,所以A->E,因为AD->E,所以存在非主属性对码的部分函数依赖,不满足2NF,满足1NF

3)U1=ABC,U2=BCD,U1 \bigcap U2=BC,U1 - U2 =A,U2-U1=D,不存在BC->D,由公式可知,该分解不是无损连接分解

4)先求Fmin:

拆右:因为A->BD,所以A->B,A->D

拆左:因为A->E,所以可用A->E代替AD->E

所以F={A->B,A->D,A->C,B->C,A->E}

去掉多余的

(1)去掉A->B:F1={A->D,A->C,B->C,A->E},A_{F1}^{+}=ACDE,B不属于A{_{F1}}^{+},不能删除;

(2)去掉A->D:F2={A->B,A->C,B->C,A->E},A_{F2}^{+}=ABCE,D不属于A{_{F2}}^{+},不能删除;

(3)去掉A->C:F3={A->B,A->D,B->C,A->E},A_{F3}^{+}=ABCDE,C属于A{_{F3}}^{+},能删除;

(4)去掉B->C:F4={A->B,A->D,A->E},B_{F4}^{+}=B,C不属于B{_{F4}}^{+},不能删除;

(5)去掉A->E:F5={A->B,A->D,B->C},A_{F5}^{+}=ABCD,E不属于A{_{F5}}^{+},不能删除;

所以最终Fmin={A->B,A->D,B->C,A->E}

Fmin求出后左边相同的先合并:Fmin={B->C,A->BDE}

然后开始判断是否为无损连接分解,因为分解后不是两个表,所以无法直接用公式判断,需要画表格

表格列为所有属性,A,B,C,D,E共五个每个占一列,所分成的三个表R1,R2,R3每个占一行

分解后的每个表中含有的属性标为a_{i}(下标i为列号(A列列号为1,B列列号为2,以此类推...)

表中不含有的属性标为b_{ij}(下标i为行号,j为列号,比如图中b13代表R1(ABD)表中不含有属性C,且b13在表格中的位置为第一行第三列)

根据最小依赖集中的函数依赖依次对表格进行改变

(1)B->C:(B列中为标为a的,对应行的C列也标为a

(2)A->BDE:(A列中标为a的,对应行B、D、E列的位置也标为a(为明细过程,分为以下三步)

A->B:

A->D:

A->E:

因为R1行和R3行出现全为a的情况,所以ρ={R1(ABD),R2(ADE),R3(ABC)}是无损连接分解。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值