时间:2021-07-01 10:21:17 帮助过:15人阅读
1.这个函数依赖是自导的(不重要的 trivial)
2.对于依赖LA(a)->LA(b),LA(a)为该关系的一个超键。
那尴尬的事情就发生了,因为根据书上的例子,我可以提出一个R(A,B,C,D,E),A->B,B->CDE.
我们可以推得,A为该关系的一个超键,但是这个超键是由F+给予的,而并非由函数直接给出的
(或者求得A+
所以,对于任何一个拆分,因为涉及到超键的概念,而不计算F+或者A就无法获得其超键,所以一个替换的判别算法为:
计算出F+
易得任何拆分所得schema的函数依赖都基于F+,故对于F+中所存在的函数依赖左端,求得其在函数依赖的最大右端,然后判断其是否已经被拆分(被拆分即不成立)若没有拆分,则拆分处理,若已拆分,则不处理。
或者可以直接求得属性全排列,然后对每个排列求其闭包,若求得闭包,且闭包不为(R-闭包来源属性集),则这个依赖存在且不满足BCNF,拆分之,过程几乎和上一个一样。
3nf的分法
求得Fc
对于Fc中每一个函数LA(a)->LA(b)创建一个表LA(a)LA(b)
对于任何的候选键,如果上述创建的表里没有一个包含它们,则创建一个新的表,属性是该候选键
对于任意一个上述的表的二元组a,b,若a是b的子集,则删去a,若b是a的子集,则删去b,直到没有东西可以删为止。
返回结果。
数据库学习笔记13_decomposition of bcnf ultimate version
标签:关系 算法 部分 无法 判断 处理 存在 函数依赖 sch