关系数据库设计相关知识汇总(三)

  1. 无关属性
    如果去除函数依赖集中的一个属性不改变该函数依赖集的闭包,则称该属性是无关的。

    形式化定义如下:
    - 如果A 属于a 且 F逻辑蕴涵(F-{a→b})U{(a-A)→b },则属性A在a中是无关的
    - 如果A属于b 且 函数依赖集(F-{a→b})U{a→(b-A)}逻辑蕴涵F,则属性A在b中是无关的 注意上述逻辑蕴涵的方向: 左右两边是可以交换的,蕴含关系依然成立。

    例子
    在F中有函数依赖AB→C和A→C,那么B在AB→C中是无关的。

  2. 用闭包检验无关属性
    考虑函数依赖a→b中的一个属性A
    - 如果A属于b,令F~ = (F-{a→b})U {a→(b-A)},计算F~下的a+,若a+包含A,则A在b中是无关的。
    - 如果A属于a,令c=a-A,计算F下c+,若c+包含b中所有属性,则A在a中是无关的。

  3. 正则覆盖
    F的正则覆盖Fc是一个依赖集,两者相互逻辑蕴涵。 Fc具有的以下性质:
    ①Fc中任何函数依赖都不含无关属性
    ②Fc中函数依赖的左半部是唯一的,即Fc中不存在两个依赖a→b,a→c。

  4. 计算正则覆盖的伪代码
    Fc = F;
    repeat

    使用合并律将Fc中所有函数依赖化简,即将a→b和a→c替换为a→bc

    在Fc中对每个函数依赖寻找其中的无关属性并将它删除

    until Fc不变

  5. 无损分解
    将R分解成R1和R2,如果把r投影到R1和R2上,然后再将投影结果r1和r2自然连接之后得到一模一样的r,那么我们将这样的分解称为无损分解,术语是无损连接分解
    有损连接分解应该也就懂了吧。

  6. 用函数依赖说明无损分解
    若R1和R2是R的无损分解,那么以下函数依赖至少有一个属于F+:
    ①R1交R2 → R1
    ②R1交R2 → R2
    换句话说,如果R1交R2 是R1或R2的超码,则R上的分解就是无损分解。我们可以用属性闭包的方法来高效检查超码。

  7. 限定
    令F为模式R上的一个函数依赖集,R1,R2,…,Rn为R的一个分解,则F在Ri上的限定是F+中所有只包含Ri中属性的函数依赖集Fi。

  8. 保持依赖的分解
    令F’=F1 U F2 U … U Fn,则具有性质F+ = F’+的分解为保持依赖的分解
    如果这个分解是保持依赖的,那么F中的每个函数依赖都可以在分解后的某一个关系上验证。但这是个易于检查的充分条件。

  9. 检验保持依赖的分解的伪代码
    result = a;
    repeat

    **for each ** 分解后的Ri
    t = (result 交 Ri)的闭包 交 Ri;
    result = result U t;

    until result没有变化

    这里的属性闭包是F下的

    如果result包含b中所有属性,则函数依赖a→b保持;当且仅当F中所有函数依赖都保持,则分解是保持依赖的。

猜你喜欢

转载自blog.csdn.net/m0_46664771/article/details/106074066