一、求闭包:
例1:设有关系模式R( A, B, C, D, E), F={AB→C,B→D, C→E, EC→B, AC→B}。求( AB) +。
求解方法:
解:
第一次:
- X(0)=X=AB
- 搜索F中每一个函数依赖得到AB→C,B→D
- X(1)=AB∪C∪D=ABCD
第二次:
- X(1)≠X(0)
- 搜索F,得到C→E,AC→B
- X(2)=ABCD∪E∪B=ABCDE
第三次:
- X(2)≠X(1)
- 搜索F,得到EC→B
- X(3)=ABCDE∪B=ABCDE
第四次
- X(3)=X(2)
- 结束
∴(AB)+ =ABCDE
二、求候选码
对于给定的关系R(A1,A2,…An)和函数依赖集F,可将其属性分为4类:
- L类 仅出现在函数依赖左部的属性且一定包含在某个候选关键字中
- R 类 仅出现在函数依赖右部的属性且一定不包含在任何候选关键字中
- N 类 在函数依赖左右两边均未出现的属性且一定包含在某个候选关键字中
- LR类 在函数依赖左右两边均出现的属性且可能包含在候选关键字中
- 在上述基础上求属性闭包
例2:设有关系模式CTHRSG( C, T, H, R, S, G) , 满足下列函数依赖:
C→T 每门课程仅有一位教师讲授
HR→C 在任一时间, 每个教室只能上一门课程
HT→R 在一个时间一位教师只能在一个教室上课
CS→G 每个学生的每门课程只有一个成绩
HS→R 在一个时间每个学生只能在一个教室听课
求其候选键。
解:
(HS)(0)=HS
(HS)(1)=HSR 和HS→R进行合并
(HS)(2)=HSRC 和HR→C进行合并
(HS)(3)=HSRCTG 和C→T,CS→G进行合并
(HS)(4)=HSRCTG 和HT→R进行合并
∵(HS)(3)=(HS)(4)
∴结束
所以HS是模式CTHRSG的唯一关键字