zoukankan      html  css  js  c++  java
  • [转]数据库三大范式最简单的解释(整合)

    1 前言
    关系数据库中的关系必须满足一定的要求,即满足不同的范式。

    目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。

    满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。

    一般说来,数据库只需满足第三范式(3NF)就行了。

    2 简介
    很多资料上的范式都讲的很难理解,这里总结一下三大范式,便于读者简易的理解。
    1NF:字段是原子性的,不可分(即列不可分)
    2NF:有主键,非主键字段依赖主键。确保一个表只说明一个事物(即不存在部分依赖)
    3NF:非主键字段不能相互依赖。 每列都与主键有直接关系,不存在传递的依赖(即不存在传递依赖)
    第一范式:不符合第一范式的例子:
    表:字段1、 字段2(字段2.1、字段2.2)、字段3 ......
    第二范式:不符合第二范式的例子:
    表:学号、课程号、姓名、学分;
    这个表明显说明了两个事务:学生信息, 课程信息;由于非主键字段必须依赖主键,这里学分依赖课程号,姓名依赖与学号,所以不符合二范式。
    第三范式:不符合第三范式的例子:
    表:学号、姓名、 年龄、 所在学院、学院联系电话、学院联系电话
    存在依赖传递: (学号) → (所在学院) → (学院地点, 学院电话)

    3 解释

    1NF:原子性,即字段不可以再分。
    2NF:唯一性,不可以把多种数据保存在同一张表中,即一张表只能保存“一种”数据。
    不符合第二范式的表:学号, 姓名, 年龄, 课程名称, 成绩, 学分;

    可能会存在问题:
    数据冗余,每条记录都含有相同信息;
    删除异常:删除所有学生成绩,就把课程信息全删除了;
    插入异常:学生未选课,无法记录进数据库;
    更新异常:调整课程学分,所有行都调整。

    正确做法:
    学生:Student(学号, 姓名, 年龄);
    课程:Course(课程名称, 学分);
    选课关系:StudentCourse(学号, 课程名称, 成绩)。

    3NF:直接性,每一列都和主键直接相关,而不能间接相关。(依赖不准传递)

    不符合第三范式的表: 学号, 姓名, 年龄, 学院名称, 学院电话,因为存在依赖传递: (学号) → (学生)→(所在学院) → (学院电话) 。

    可能会存在问题:

    数据冗余:有重复值;
    更新异常:有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况

    正确做法:

    学生:(学号, 姓名, 年龄, 所在学院);

    学院:(学院, 电话)。

    参考:

    1.https://blog.csdn.net/andywuchuanlong/article/details/25913235

    2.https://blog.csdn.net/chenyyhh92/article/details/51174343 

  • 相关阅读:
    EL表达式
    使用Cookie保存用户信息
    GUI学习之二——PyQt控件初识
    GUI学习之一——PyQt5初识
    HTML学习总结
    centos7 mysql的安装与配置
    Python之RabbitMQ的使用
    python之模块的导入
    Python之ftp服务器
    GUI学习之〇——PyQt5安装
  • 原文地址:https://www.cnblogs.com/fanbi/p/10517658.html
Copyright © 2011-2022 走看看