MySQL数据库学习之三大范式

MySQL数据库学习之三大范式


数据库设计的范式

  • 概念
    设计数据库时,需要遵循的一些规范。要遵循后边的范式必须先遵循前面的范式要求
    主要遵循三种范式:第一范式、第二范式、第三范式
    根据下面这张表来进行分析:

    学号 姓名 系名 系主任 课程名称 分数
    10010 张无忌 经济系 张三丰 高等数学 95
    10010 张无忌 经济系 张三丰 大学英语 37
    10010 张无忌 经济系 张三丰 计算机基础 65
    10011 令狐冲 法律系 任我行 法理学 54
    10011 令狐冲 法律系 任我行 大学英语 75
    10011 令狐冲 法律系 任我行 法律社会学 83
    10012 杨过 法律性 任我行 法律社会学 95
    10012 杨过 法律性 任我行 法理学 63
    10012 杨过 法律性 任我行 大学英语 95

    存在问题:

    1. 存在非常严重的数据冗余(重复):姓名,系名,系主任
    2. 数据添加存在问题,添加新开设的系和统主任时,数据不合法
    3. 数据删除存在问题:张无忌同学毕业了,删除数据,会将系的数据一起删除掉
  • 分类

    • 第一范式(1NF):每一列都是不可分割的原子数据项
    学号 姓名 系名 系主任 课程名称 分数
    10010 张无忌 经济系 张三丰 高等数学 95
    10010 张无忌 经济系 张三丰 大学英语 37
    10010 张无忌 经济系 张三丰 计算机基础 65
    10011 令狐冲 法律系 任我行 法理学 54
    10011 令狐冲 法律系 任我行 大学英语 75
    10011 令狐冲 法律系 任我行 法律社会学 83
    10012 杨过 法律性 任我行 法律社会学 95
    10012 杨过 法律性 任我行 法理学 63
    10012 杨过 法律性 任我行 大学英语 95
    • 第二范式:在1NF的基础之上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖

      • 几个概念
      1. 函数依赖:A---->B,如果通过A属性(属性组)的值,可以唯一确定属性B的值,则B依赖于A
        例如:学号---->姓名 (学号,课程)---->分数
      2. 完全函数依赖:A---->B,如果A是一个属性组,则B属性值确定需要依赖于A属性组所有的属性值。
      3. 部分函数依赖:A---->B,如果A是一个属性组,则B属性值确定需要依赖于A属性组中的某一些值即可。
        例如:(学号,课程)---->姓名
      4. 传递函数依赖:A---->B,B---->C ===> A---->C
      5. 码:在一张表中,一个属性或一个属性组被其他所有属性,被其他所有属性完全依赖,这个属性(属性组)为该表的码。
        例如:(学号课,程名称)为码
      • 将上面的表消除部分依赖
        分为课程表,和学生表
        解决一个问题
    • 第三范式(3NF):在2NF基础之上,任何非主属性不依赖其他非主属性(在2NF基础之上消除传递依赖)
      分为三张表
      课程表,学生表,系表
      完美解决以上三个问题

备份数据库

  1. 命令行
    备份:mysqldump -uroot -ppassword db > 路径
    还原:
    1. 创建数据库
    2. source 路径/SQL文件

你可能感兴趣的:(数据库,数据库三大范式)