通知
此博客运行在jpress系统上,如果你喜欢此博客模板,请加QQ群:1061691290(whimurmur模板/jpress插件),免费下载使用

数据库系统概论高级 6-8 关系数据理论 关系模式的分解

867人浏览 / 0人评论 | 作者:whisper  | 分类: 数据库系统概论  | 标签: 数据库系统概论  | 

作者:whisper

链接:http://proprogrammar.com:443/article/581

声明:请尊重原作者的劳动,如需转载请注明出处


    6.4 模式的分解

    6.4.1 模式分解的3个定义

    关系模式的规范化过程是通过对关系模式的分解来实现的
    什么是模式分解
    定义6.16 R<U, F>的一个分解是指: ρ={R1<U1, F1>, …, Rn<Un, Fn>} ,其中U= U1∪U2∪… ∪Un,并且没有Ui ⊆ UJ, 1 ≤ i, j ≤ n,Fi 是F在Ui 上的投影。
    相应地将 R 存储在二维表 r 中的数据分散到二维表r1, r2, … , rn中去,其中 ri是 r在属性集 Ui上的投影。

    把低一级的关系模式分解为若干个高一级的关系模式并不是唯一的
    在这些分解方法中,只有能够保证分解后的关系模式与原关系模式等价的方法才有意义
    从不同的角度去观察问题,对“等价”的概念形成了3种不同的定义:

  • 分解具有无损连接性(lossless join)
  • 分解要保持函数依赖(preserve functional dependency)
  • 分解既要保持函数依赖,又要具有无损连接性

    这三个定义是实行模式分解的三条准则。

    例子

    [例] 对于关系模式S-L(Sno, Sdept, Sloc) , S-L中有下列函数依赖:
    Sno→Sdept
    Sdept→Sloc
    传递  Sno→Sloc
    已知S-L∈2NF, 该关系模式存在非主属性对码的传递函数依赖。
    存在插入异常、删除异常、数据冗余度大和修改复杂的问题。需要分解该关系模式,使成为更高范式的关系模式。
    下面给出几种不同的分解情况,进行分析,引出模式分解的3个定义。

    例子:第一种分解情况

    第一种分解情况:
    将S-L分解为下面三个关系模式:
    SN(Sno)
    SD(Sdept)
    SO(Sloc)

  • SN、 SD和SO都是规范化程度很高的关系模式。
  • 但分解后的关系模式会丢失许多信息

    假设下面是S-L关系模式的一个关系:

 

    但分解后的关系, 无法查询95001学生所在的系 或 所住的宿舍了!
    这种分解是不可取的。 丢失了许多信息, 丢失了数据之间联系的信息。

    例子:第二种分解情况
    将S-L分解为下面二个关系模式:
    NL(Sno, Sloc)
    DL(Sdept, Sloc)

    分解后的关系为:

    对NL和DL关系 进行自然连接的结果为:

    NL⋈DL比原来的S-L关系多了三个元组
    因此我们也无法知道原来的S-L关系中究竟有哪些元组,
    从这个意义上说, 此分解仍然丢失了信息。

    例子:第三种分解情况

    将S-L分解为下面二个关系模式: ND(Sno, Sdept)  NL(Sno, Sloc)

    分解后的关系为:

    对ND和NL关系进行自然连接的结果为:

    第三种分解情况没有丢失信息,称为分解“具有无损连接性”。

    但是它存在下面的问题:
    例如95001学生由CS系转到IS系, ND关系的(95001, CS)元组和NL关系的(95001, A)元组必须同时进行修改,否则会破坏数据库的一致性。

    原因:

  • S-L中的函数依赖Sdept→Sloc 既没有投影到关系模式ND上,也没有投影到关系模式NL上。
  • 这种分解没有保持原关系模式中的函数依赖。

    例子:第四种分解情况

    将S-L分解为下面二个关系模式:
    ND(Sno, Sdept) , Sno→Sdept
    DL(Sdept, Sloc), Sdept→Sloc

    这种分解保持了函数依赖,称为“具有保持函数依赖性”。

    再看第四种分解情况:
    将S-L分解为下面二个关系模式:
    ND(Sno, Sdept) , Sno→Sdept
    DL(Sdept, Sloc), Sdept→Sloc

 

    这种分解不仅“具有保持函数依赖性” , 还“具有无损连接性” 。

    例子:分解情况分析

    在给出的例子中:
    第一种情况: 既不具有无损连接性,也未保持函数依赖,
    第二种情况: 既不具有无损连接性,也未保持函数依赖。
    第三种情况: 具有无损连接性,但未保持函数依赖。
    第四种情况: 既具有无损连接性,又保持了函数依赖。

    6.4.2 分解的无损连接性和保持函数依赖性

    1.具有无损连接性的模式分解

    定义6.18
    ρ={R1<U1, F1>, …, Rn<Un, Fn>}是 R<U, F>的一个分解,若对R<U, F>的任何一个关系 r均有 r = r在ρ中各关系模式上投影的自然连接成立,则称分解ρ具有无损连接性。 简称ρ为无损分解。

  • 只有具有无损连接性的分解才能够保证不丢失信息。
  • 无损连接性不一定能解决插入异常、删除异常、修改复杂、数据冗余等问题。

    * 算法6.2 判别一个分解的无损连接性。 p.197

    2.保持函数依赖的模式分解

    定义6.19
    ρ={R1<U1, F1>, …, Rn<Un, Fn>} 是 R<U, F>的一个分解,若F所逻辑蕴含的函数依赖一定也为分解后所有的关系模式中的函数依赖 Fi 所逻辑蕴含,即F + = ( F1 ∪ F2 ∪ … ∪ Fn ) +,则称关系模式R的这个分解是保持函数依赖的(Preserve dependency)

    3.分解的无损连接性和保持函数依赖性

    如果一个分解具有无损连接性,则它能够保证不丢失信息。
    如果一个分解保持了函数依赖,则它可以减轻或解决各种异常情况。
    分解具有无损连接性和分解保持函数依赖是两个互相独立的标准。

  • 具有无损连接性的分解不一定能够保持函数依赖。
  • 保持函数依赖的分解也不一定具有无损连接性。

    6.4.3 模式分解的算法

    算法6.3(合成法) 转换为3NF的保持函数依赖的分解
    算法6.4 转换为3NF既有无损连接性又保持函数依赖的分解
    算法6.5 (分解法) 转换为BCNF的无损连接分解
    算法6.6 达到4NF的具有无损连接性的分解 

    按照不同的分解算法,关系模式所能达到的范式是不相同的。
    若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能够达到BCNF。
    若要求分解既具有无损连接性,又保持函数依赖,则模式分解一定能够达到3NF,但不一定能够达到BCNF。
    若要求分解具有无损连接性,那么模式分解一定能够达到4NF。

    6.5 小结

    函数依赖

  • 平凡函数依赖与非平凡函数依赖
  • 完全函数依赖与部分函数依赖
  • 传递函数依赖

    范式的概念
    关系模式规范化的基本步骤
    Armstrong公理系统
    模式的分解

    关系模式规范化及基本步骤

    Armstrong公理系统

    关系模式分解:模式分解等价的3个准则、模式分解的算法

关系    模式的规范化基本思想

    1 . 逐步消除不合适的数据依赖中使模式中的各关系模式达到某种程度的“分离” ——模式分解
    2. 一事一地的模式设计原则
    3 . 规范化理论为数据库设计提供了理论指南和算法工具。
    4 . 结合应用环境的具体情况,合理地设计数据库模式

    学习关系规范化理论的重要性:

    是关系数据库的重要理论基础。
    为数据库设计提供理论指南和算法工具
        —规范化理论研究的实际应用价值。

    思考

    1. 为什么我们不能直接由定义6.18 来判断一个分解的无损连接性。
    2. 基于右边表,是否能找出其候选码 ?如果能,请给出所有候选码。如果不能,请说明为什么。


亲爱的读者:有时间可以点赞评论一下

点赞(0) 打赏

全部评论

还没有评论!