当前位置:Gxlcms > 数据库问题 > 数据库学习笔记13_decomposition of bcnf ultimate version

数据库学习笔记13_decomposition of bcnf ultimate version

时间: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   

人气教程排行