一、闭包的计算
二、候选码的相关计算
三、函数依赖集的等价
四、函数依赖集的最小覆盖的计算
一、闭包的计算
计算X的闭包: 首先XF+=X 之后对于F中的每个函数依赖,A->B,只要A在XF+中,那么XF+就并上B,直到XF+不再改变为止,得到的结果就是X的闭包。二、候选码的相关计算
1、得到一个候选码首先令K=U,然后逐个删除K中的元素,如果删除之后的K在F上的闭包是U,那么K=K-X(X为删除的元素),直到不能再删除元素为止,最后得到的就是一个候选码(这个方法其实就是从候选码与函数依赖之间的关系得到的,也就是说如果是候选码的话,那么就可以函数决定所有的属性)。
2、得到所有的候选码
可以重复使用得到一个候选码的方法直到得到所有的候选码,还有直接求出所有的候选码的方法:
首先求出一个候选码,然后得到该候选码中的所有的双部属性,对于其每一个双部属性,如果F中存在函数依赖X->Y,其中有双部属性A属于Y(注意是属于,并不是等于,只要属于就可以了)那么就用X代替该候选码中的A得到新的候选码,知道不能得到新的候选码。
三、函数依赖集的等价
如果F=G,那么就是F属于G的闭包,G属于F的闭包。四、函数依赖集的最小覆盖的计算
函数依赖集的最小覆盖应该满足的条件是:- 单属性化:也即是说如果函数依赖集的右边是多个属性的话,就要分开,直接左边的属性集保持不变,右边拆开就可
- 即约化:也就是说在函数依赖中左边有多个属性,即约化就是为了将左边的属性集合简化,方法就是通过不断删除元素,计算闭包,注意即约化计算闭包的时候考虑的函数依赖集是F,也就是说包括要进行既约的这个函数依赖也在内
- 无冗余:将某个函数以来删除,然后看其左边的属性集的闭包在新的函数依赖集G(也就是在F的基础上去掉删除的函数依赖得到的新的属性集合)上的闭包是否包括删除的函数依赖的右边的部分,如果包括,那么就说明该函数依赖是冗余的,将其删除。(注意的是在计算闭包的时候,参考的函数依赖集合是G,也就是在F的基础上删除被删除的函数依赖的新的函数依赖集合)
在求解函数依赖集的最小覆盖的时候,一般是先单属性,然后是既约化,最后是无冗余化,
并且既约化和无冗余化以依赖的函数依赖集合是不同的。