3NF是在BCNF无法直接选择的比较好的替代设计。

而解决传递依赖和局部以来需要进行分解成3NF模式,也就是第三范式。

postbird

如何无损分解并且能够保持依赖的分解是比较重要的。

算法:

  1. 对于关系模式R和R上成立的FD集F,先求出F的最小依赖集,然后再把最小依赖集中哪些左部相同的FD用合并性合并起来。
  2. 对最小依赖集中,每个FD X→Y去构成一个模式XY。
  3. 在构成的模式集中,如果每个模式都不包含R的候选键,那么把候选键作为一个模式放入模式集中。

这样得到的模式集是关系模式R的一个分解,并且这个分解既是无损分解,又能保持FD。

示例:

设关系模式R(ABCDE),R的最小依赖集为{A→B, C→D}。

将其无损分解并保持FD的分解成3NF。

  1. 从依赖集可知R的候选建为ACE。
  2. 根据最小依赖集,可知:ρ= {AB,CD}。然后再加入由候选建组成的模式ACE。
  3. 最后结果ρ= {AB,CD,ACE}是一个3NF模式集,R相对于该依赖集是无损分解且保持FD。

关于求最小依赖集的算法可以看另一篇文章:http://www.ptbird.cn/minimum-dependency-set.html