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

数据库系统概论高级 6-6 关系数据理论 BCNF 规范化小结

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

作者:whisper

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

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


    一个例子

    例: 关系模式STJ(S, T, J)中, S表示学生, T表示教师, J表示课程
    语义:
    假设每一教师只教一门课 T→J
    每门课由若干教师教,但某一学生选定某门课,就确定了一个固定的
    教师 (S, J) →T
    某个学生选修某个教师的课就确定了所选课的名称 (S, T)→J
    T→J ,(S, J) →T, (S, T)→J

    1 候选码: (S, J)和(S, T)
    2 S T J 都是主属性
    3 不存在非主属性对码的部分函数依赖
    和传递依赖
    3 STJ∈3NF

    虽然STJ(S,T,J) ∈3NF,但它仍存在增删改等异常,还不是一个理想的关系模式。

    (1) 插入异常
    如果某个教师开设了某门课程,但尚未有学生选修,则有关信息也无法存入数据库中。
    (2) 删除异常
    如果选修过某门课程的学生全部毕业了,在删除这些学生元组的同时,相应教师开设该门课程的信息也同时丢掉了。
    (3) 数据冗余度大
    虽然一个教师只教一门课,但每个选修该教师该门课程的学生元组都要记录这一信息。
    (4) 修改复杂
    某个教师开设的某门课程改名后,所有选修了该教师该门课程的学生元组都要进行相应修改。

    思考题:列出一些数据,验证这里列出的异常情况。

    原因:

    主属性J部分依赖于码(S, T)。因为T→J

    解决方法:
    采用投影分解法,将STJ分解为二个关系模式: SJ(S, J); TJ(T, J)

    SJ的码为(S, J), TJ的码为T。

    在分解后的关系模式中没有任何属性对码的部分函数依赖和传递函数依赖。
    它解决了上述四个问题:
    (1) TJ关系中可以存储所开课程尚未有学生选修的教师信息。
    (2) 选修过某门课程的学生全部毕业了,只是删除SJ关系中的相应元组,不会影响TJ关系中相应教师开设该门课程的信息。
    (3) 关于每个教师开设课程的信息只在TJ关系中存储一次。
    (4) 某个教师开设的某门课程改名后,只需修改TJ关系中的一个相应元组即可。

    6.2.6 BC范式(BCNF)

    BCNF(Boyce Codd Normal Form)是由Boyce和Codd提出的,比3NF更进了一步。通常认为BCNF是修正的第三范式,有时也称为扩展的第三范式。

    BCNF的定义

    即,在关系模式R<U, F>中,如果每一个决定因素都包含码,则R∈BCNF。
    例: STJ(S, T, J) ∈ 3NF T→J ,(S, J) →T, (S, T)→J

    SJ(S, J) ∈ BCNF    SJ的码为(S, J) , all-key
    TJ(T, J) ∈ BCNF    TJ的码为T, T→J

    BCNF的关系模式所具有的性质
    ⒈所有非主属性对每一个码都是完全函数依赖。
    ⒉所有主属性对每一个不包含它的码也是完全函数依赖。
    3.没有任何属性完全函数依赖于非码的任何一组属性。

  • 如果关系模式R∈BCNF,必定有R∈3NF(证明略)
  • 如果关系模式R∈3NF,不一定有 R∈BCNF(举一个例子说明)
  • 如果一个关系数据库中的所有关系模式都属于BCNF,那么在函数依赖范畴内,它已实现了模式的彻底分解,达到了最高的规范化程度,消除了操作异常诸多问题。

     6.2.9 规范化小结

  • 一个关系模式只要其分量都是不可分的数据项,它就是规范化的关系模式,但这只是最基本的规范化。
  • 规范化程度过低的关系模式不一定能够很好地描述现实世界,可能会存在插入异常、删除异常、修改复杂、数据冗余等问题,解决方法就是对其进行规范化,转换成高级范式。
  • 一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式集合,这种过程就叫关系模式的规范化。
  • 关系数据库的规范化理论是数据库逻辑设计的工具。

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

 

    规范化的基本思想:

  • 逐步消除数据依赖中不合适的部分,使模式中的各关系模式达到某种程度的“分离”
  • 采用“一事一地” 的模式设计原则

            • 让一个关系描述一个概念、一个实体或者实体间的一种联系。
            • 若多于一个概念就把它“分离”出去。

  • 规范化实质上是概念的单一化

     思考题

    1. 举例子说明属于3NF的关系模式有的属于BCNF,但有的不属于BCNF。
    2. 在关系数据库中,任意一个二元关系模式R至少可以达到第几范式?(指在函数依赖的范畴内,可达到的最高范式)
    3. 如果一个关系模式R的主码是全码,则R至少可以达到第几范式?


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

点赞(0) 打赏

全部评论

还没有评论!