首页 > 技术文章 > SQL Server属性集的闭包,最小函数依赖集

fsn-nervergiveup 2018-06-10 17:25 原文

多说无益,直接看题。

已知关系模式R(U,F),其中U={ A,B,C,D,E},F是这样的关系集合{AB—>C,B—>D,C—>E,EC—>B,AC—>B}
求AB的闭包。

  1. 第一步,设X0=AB,在F中找出这样的关系,左边是AB的子集,即左边为A,B,AB,从题目可得AB—>C,B—>D
  2. 第二步,将X0的子集推出的属性,这里是C,D与X0并起来得到X1=ABCD,因为X1不等于X0(直到Xi=Xj)继续运算
  3. 重复第一步,但此时注意,你要找的是X1的子集,而且是从来没用过的子集,像A,B,AB就不需要重新计算了,此时找的应该是C—>E,AC—>B
  4. 重复第二步,得到X2=ABCDE,此时虽然X2!=X1,但是X2却包含所有属性集合了,也可以停止继续运算,即AB的闭包为ABCDE

总结:也就是说,我们找一个属性集的闭包时,就是在找该属性所有能直接或间接推导出来的属性,然后不断合并。


最小函数依赖集,首先要满足下列条件:

  1. 一个函数依赖中右部分只能含有一个属性
  2. 不含多与依赖,即去掉某一函数依赖后形成的集合B和原来的集合A是等价的,在说白点,B可以退出去掉的函数依赖
  3. 不含部分依赖,像F{AB—>C,A—>C}就不是最小函数依赖集

已知关系模式R(U,F),其中U={A,B,C},F是这样的关系集合{A—>BC,B—>C,AB—>C,A—>B}
求该模式的最小函数依赖集。

答案:F={B—>C,A—>B},A—>BC不满足一个函数依赖中右部分只能含有一个属性,B—>C,AB—>C存在部分依赖,

也可看做多余依赖,因为B—>C,AB—>C是绝对成立的,有跟没有无差别

推荐阅读