规范化理论:如何计算最小依赖集?

什么是最小函数依赖集?

如果函数依赖集F满足一下条件,则称F为一个最小函数依赖集

(1)F中任意一函数的右部仅含有一个属性。

(2)F中不存在这样的函数依赖X→A,使得F与F-{X-A}等价,即F中的函数依赖均不能由F中其他函数依赖导出。

(3)F中不存在这样的函数依赖X→A,X有真子集Z使得F-{X→A}\cup{Z→A}与F等价,即F中各函数依赖的左部均为最小属性集(也就是说左部不存在冗余属性)。

 

如何计算最小函数依赖集?

算法步骤:

(1)将F中的所有函数依赖的右边化为单一属性;

(2)去掉F中的所有函数依赖左边的冗余属性;

(3)去掉F中所有冗余的函数依赖。

F的函数最小依赖集_{}F_{min}并不是唯一的,它与对各函数依赖FD_{i}及X→A中X个属性的处置的顺序有关。

 

【例题】已知函数依赖集F={A→BD, AB→C, C→D},求F的最小函数依赖集。

解题思路:

(1)将F中的所有函数依赖的右边化为单一属性:F={A→B, A→D, AB→C, C→D}。

(2)去掉F中的所有函数依赖左边的冗余属性:观察F,发现可能要处理的函数依赖为AB→C。

         先求属性A关于F的闭包A_{F}^{+}

         A→B,A,B自然在A_{F}^{+}中;

         AB→C,C也在A_{F}^{+}中;

         C→D,D也在A_{F}^{+}中;

(闭包的具体求解算法请参考:如何求属性集X关于F的闭包?)

因此,A_{F}^{+}={A, B, C, D},即A能根据Armstrong公理推导出B,C,D,说明函数依赖AB→C左边的属性B是冗余的,可以去掉。处理后的F={A→B, A→D, A→C, C→D}。

同理,还需要看属性B关于F的闭包B_{F}^{+},来判断AB→C左边的A是否是冗余的。B_{F}^{+}={B},因此A不是冗余的。

(3)去掉F中所有冗余的函数依赖关系:我们试着看一下函数依赖A→D是否是冗余的。

         先去掉A→D,处理后的F={A→B, A→C, C→D};

         求A关于处理后F的闭包A_{F}^{+}^{'}^{}A_{F}^{+}^{'}={A, B, C, D};

 发现A_{F}^{+}^{'}=A_{F}^{+},说明即使不需要F中的函数依赖A→D,属性A也能根据Armstrong公理导出D,因此A→D是冗余的,可以去掉,去掉后得到F的最小依赖集F_{min}={A→B, A→C, C→D}。

          

 

参考自:《数据库系统概论》,王珊,萨师煊编著

 

 

 

你可能感兴趣的:(数据库原理,数据库原理,求最小函数依赖集)