1.求闭包
推理规则推导
2.求候选码
在求解之前先要明白一些定理。我们把函数依赖集中F中的属性分为四类:
L类:所有依赖关系中仅出现在函数依赖左部的属性。
R类:所有依赖关系中仅出现在函数依赖右部的属性。
LR类:所有依赖关系中即出现在函数依赖左部又出现在函数依赖右部的属性。
N类:所有依赖关系中没有出现的属性。
定理一:对于给定的关系模式R及其函数依赖集F,若X(X∈U)是L类属性,则X必为R的任一候选码的成员。
定理二:对于给定的关系模式R及其函数依赖集F,若X(X∈U)是R类属性,则X不在任何候选码中。
定理三:对于给定的关系模式R及其函数依赖集F,若X(X∈U)是LR类属性,则X可能在候选码中。
定理四:对于给定的关系模式R及其函数依赖集F,若X(X∈U)是N类属性,则X必包含在R的任一候选码中。
例题:
R{ABCDE},F{AB->C,AB->E,CDE->AB},求候选码。
候选码为{ABD,CED}。
3.范式转换
1NF
→
转
化
\overset{转化}{\rightarrow}
→转化…
→
转
化
\overset{转化}{\rightarrow}
→转化 5NF
BCNF具体做法:
BCNF解题步骤
1、求出R中所有FD左侧的闭包,取一个闭包{X}+,若能包含R中的所有元素,则该FD满足BCNF
2、如果不能包含R中所有元素,则将R分解成两个关系R1、R2,{X}+作为R1的元素,X与R中剩余元素作为R2的元素
3、对R1、R2递归处理上述步骤
BCNF例题
已知R(A,B,C,D,E) 含有FD:AB->C C->D D->B D->E,求根据BCNF分解的新集合。
- 先把R中所有FD的左侧对应的闭包写出来
{A,B}+={A,B,C,D,E}
{C}+={B,C,D,E}
…
其实不用列完,发现第二个就已经不满足,那就根据第二个进行分解
根据{C}+分解R
R1={B,C,D,E} R2={A,C} - R2已经只有两个元素了,必定满足BCNF规范,所以不用考虑,接下来继续考虑R1是否满足BCNF
将R1中所有FD的左侧对应的闭包写出来
{D}+={B,D,E}
…
3.出现了不满足的闭包,则继续分解R1
根据{D}+分解R1
R3={B,D,E} R4={C,D} - R4不需再分,接下来考虑R3是否满足BCNF
将R3中所有FD的左侧对应的闭包写出来
{D}+={B,D,E} - R3中所有闭包满足条件,递归分解结束
4. 求最小依赖集
具体步骤
1.右边单一化
2.除去自身求闭包
3.左部最小化
练习1:
练习2: