范式

作者: Yix1a | 来源:发表于2017-09-29 17:34 被阅读13次
    • 第一范式(1NF)

    符合1NF的关系中的每个属性不可再分。以下就不符合


    仅仅符合1NF的设计,会存在数据冗余,插入异常,删除异常,修改异常的问题

    例如

    • 每一个学生的学号、姓名、系名、系主任这些数据重复多次——数据冗余过大
    • 假如学校新建了一个系,诞生暂时还有新生 ,那么系名和系主任将无法插入——插入异常
    • 假如某个系中所有学生相关记录都删除,那么所有系与系主任也就随之消失了。——删除异常
    • 假如小明转系到法律系,那么为了保证数据库的一致性,需要修改三条记录中系与系主任的数据——修改异常
    • 第二范式

    2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖。

    • 函数依赖
      若在一张表中,在属性x的值确定的情况下,必定能确定属性Y的值,则可以说函数Y依赖于函数X,写作X→Y
      比如学号→姓名,而姓名有重复不能百分百确定学号是什么所以不能姓名→学号。
    • 完全函数依赖
      对于X的任何一个真子集,X(真子集)→Y不成立,那么我们称Y对于X完全函数依赖。记作XF→Y
    • 部门函数依赖
      假如Y函数依赖于X,但同时Y并不完全函数依赖于X,那么我们就称Y部分函数依赖于X,记作XP→Y
    • 传递函数依赖
      假如Z函数依赖于Y,且Y函数依赖于X(Y不包含于X,且X不函数依赖于Y),那么我们就称Z传递函数依赖于X,XT→Z.

    • 若属性或属性组K之外的所有属性都完全函数依赖于K,那么我们称K为候选码,简称码,在实际中可以理解为:假如当K确定的情况下,该表除K之外的所有属性的值也就随之确定,那么K就是码。
    • 主属性和非主属性
      包含在任何一个码中的属性是主属性,其他的是非主属性。
    • 判断2NF
      就是看表中是否存在非主属性对于码的部分函数依赖。
      判断方法是
      • 找出数据表的码
      • 根据第一步的码,找出主属性和非主属性
      • 看是否存在部门函数依赖
        在(学号、课名)→姓名中,因为课名→姓名是部门函数依赖,所以不符合。
    • 要达到2NF就可能需要拆分表。拆到符合第二范式。

    然而删除异常和插入异常仍没有改进

    • 第三范式3NF

    在前两个范式的基础之上,消除了非主属性对吗的传递函数依赖。
    方法仍然是拆分拆分拆分到符合范式。

    • BCNF范式

    解决办法就是要在 3NF 的基础上消除主属性对于码的部分与传递函数依赖。

    相关文章

      网友评论

          本文标题:范式

          本文链接:https://www.haomeiwen.com/subject/lfgwsxtx.html