- 函数依赖集的闭包
定义
在关系模式R(U,F)中,U是R的属性全集,F是R上的一组函数依赖。
所有被F逻辑蕴含的函数依赖的全集称为F的闭包,记作F+
计算F+过程
- 初始,F+ = F
- 对F+中每个函数依赖f,在f上应用自反性和增广性,将结果加入F+中;对F+
- 中的一对函数依赖f1和f2,如果f1和f2可以使用传递律结合起来,则将结果加入F+中
- 重复步骤2,直到F+不再增大为止
- 属性集闭包
将函数依赖集闭包问题转化为求属性集问题
定义
设有关系模式R(U,F),U为R的属性集,F是R上的函数依赖集,X是U的一个子集(X包含于U)。用函数依赖推理规则可从F推出的函数依赖X→A中所有A的集合,称为属性集X关于F的闭包,记为X+ 即:
X+ = { A | X→A能够由F根据Armstrong公理导出}
计算X+过程
- 初始,X+ = X
- 如果F中有某个函数依赖Y→Z满足Y包含于X+。则X+ = X+ ∪ Z
- 重复步骤2,知道X+不再增大为止
- 候选键的求解方法
四个种类
- L类:仅出现在函数依赖左部的属性
- R类:仅出现在函数依赖右部的属性
- N类:在函数依赖的左部和右部均不出现的属性
- LR类:在函数依赖的左部和右部均出现的属性
结论
- 若X是L类属性,则X一定包含在关系模式R的任何一个候选键中;若X+ 包含了R的全部属性,则X为关系模式R的唯一候选键。
- 若X是R类属性,则X不包含在关系模式R的任何一个候选键中。
- 若X是N类属性,则X一定包含在关系模式R的任何一个候选键中。
- 若X是LR类属性,则X可能包含在关系模式R的任何一个候选键中。
求解方法
- 找出所有的L类和N类属性
- 将L类和N类属性结合,判断结果是不是包含R的全部属性,如果是,则L类和N类为候选键,如果不是,继续第三步
- 找出所有的LR类属性
- 将L、N类和每个LR类属性分别组合,判断结果是不是包含R的全部属性
- 如果是,对应的L、N类和LR类属性为候选键(计算每一个L、N类和LR类组合)