zoukankan      html  css  js  c++  java
  • 数据库学习摘记 —— 关系模式的规范化

    范式:

    满足不同程度要求的关系模式。

    第一范式(简称1NF),第二范式(2NF),第三范式(3NF),BC范式(BCNF),第四范式(4NF)和第五范式(5NF)。各范式之间的关系为 1NF 2NF 3NF BCNF 4NF 5NF。

    第一范式:

    一个关系模式R(U)的所有属性都是不可再分的基本数据项。所有的关系模式都必须为第一范式。

    第二范式:

    每一个非主属性完全函数依赖于某个候选键的第一范式。

    第三范式:

    每一个非主属性不传递函数依赖于R(U)的候选键的第二范式。

    此时关系模式R(U)的每一个非主属性既不部分依赖于候选键,也不传递函数依赖于候选键。

         

    BC范式:

    • 对于第一范式R(U)的任意一个函数依赖X→Y,当YX时,X必含有候选键,即每一个非平凡函数依赖的决定因素都包含有候选键,则称为BC范式。
    • 对于第一范式R(U)的每个属性都不传递依赖于R的候选键,则称R(U)为BC范式。
    • 此时关系模式R(U)的所有主属性和非主属性既不部分依赖于候选键,也不传递函数依赖于候选键。

       

    【设关系模式StudyTeach(Sno,Teacher,Cname)】

    每一位教师只教一门课;每门课有若干教师讲授;某一学生选修某一门课,就有一个确定的教师。

    由属性及其相互联系的语义可知:

    {Sno,Cname}→Teacher;

    {Sno,Teacher}→Cname;

    Teacher→Cname

    关系模式StudyTeach的所有属性都是主属性,因此它没有任何非主属性对候选键传递函数依赖或部分函数依赖,故关系模式StudyTeach是3NF的。

    但它不是BCNF的,因为Teacher是决定因素,而Teacher不包含候选键。

       

    【设关系模式StudyPlace(Sno, Cname, Place) 】

    每个学生学习每门课程都有一定的名次;每门课程中每一名次只有一个学生(无并列名次)

    由属性及其相互联系的语义可知:

    {Sno, Cname}→Place

    {Cname, Place}→Sno

    StudyPlace的所有属性都是主属性,即没有非主属性对候选键传递函数依赖或部分函数依赖,故属于3NF。

    因为函数依赖的决定因素都包含侯选健,所以它也是BCNF。

       

    • 如果R(U)∈3NF,R(U)有唯一候选键X,则必有R(U)∈BCNF。
    • 当一张表的属性都为主属性时,该表是BCNF。
    • BCNF是在函数依赖的条件下对模式分解所能达到的最高分离程度。
    • 一个数据库模式中的所有关系模式如果都属于BCNF,那么在函数依赖范畴内,已实现了彻底的分离,并基本消除了插入和删除等异常问题。

    多值依赖:

    设R(U)是属性集U上的一个关系模式,X,Y,Z是U的子集,并且Z=U-X-Y。若对于R(U)的任一具体关系r,r在属性(X,Z)上的每一个值,就有属性Y上的一组值与之对应,且这组值仅仅决定于X上的值而与Z上的值无关,则称Y多值依赖于X,记作X→→Y。

    平凡多值依赖:

    Z=U-X-Y= Ø

    非平凡多值依赖:

    Z=U-X-Y≠ Ø

    第四范式:

    若对于第一范式R(U)的每一个非平凡的多值依赖X→→Y (YX),X都含有候选键,则称R(U)为第四范式,即R(U)∈4NF。

    【关系模式DeptInfo(DeptName,Teacher,    Sname)】

    有两个多值依赖

    DeptName→→Teacher

    DeptName→→Sname

    尽管是非平凡的多值依赖,但候选键是全键,关系模式DeptInfo不属于4NF

       

    【把DeptInfo分解为DeptTeacher(DeptName, Teacher),DeptStudent(DeptName, Sname)】

    分别仅有一个平凡的多值依赖

    DeptName→→Teacher

    DeptName→→Sname

    因为不存在任何非平凡的多值依赖,所以关系模式DeptTeacher和DeptStudent都是4NF。

       

  • 相关阅读:
    tomcat常见错误
    tomcat——大致简介和执行过程
    JSON的基本操作
    VS Code 终端显示问题
    VS Code在本地进行调试和打开本地服务器
    重做了一下我的音乐播放器
    Treimu更新记录1.2.9.0
    Android开发中Eclipse里的智能提示设置
    一次面试经历
    正确处理WPF中Slider值改变事件的方式
  • 原文地址:https://www.cnblogs.com/kuluo/p/12541454.html
Copyright © 2011-2022 走看看