三范式分解算法

三范式是BC范式的放宽
三范式条件(满足一个即可):
1. α–>β是平凡的函数依赖,除了子集和父集的函数依赖,大多的函数依赖都是非平凡的
2. α是关系模式R的一个超码
3. (β-α)属性集里的所有属性都被包含在 R的candidate key里,注意 (β-α)的属性集里的所有元素,可以 分别被包含在多个 candidate key中

三范式分解算法伪代码如下:

//在关系模式 R 的函数依赖的正则覆盖F_c下做如下算法
i=0
for each 非平凡函数依赖 α-->β函数依赖 in F_c
    R_i= {α + β} //此R_i关系模式由α+β组成
    i++
if 不存在R_i能包含 R 的candidate key,其中i为0,1,2,3.....n
    R_i = R的任意candidate key //使满足条件2或3
//以下操作用于冗余
loop UNTILL {R_I}中没有冗余的关系模式
    if R_i中的元素都在 R_j中 //冗余
        删除R_i //! 删除此关系模式并不会造成关系模式有损分解
END LOOP

该三范式分解算法是无损的且保持依赖的

你可能感兴趣的:(数据库)