• 数据库设计三大范式


      为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。

      目前,主要有六种范式:第一范式、第二范式、第三范式、BC范式、第四范式和第五范式。满足最低要求的叫第一范式,简称1NF。在第一范式基础上进一步满足一些要求的为第二范式,简称2NF。其余依此类推。

      

    第一范式(1NF)

      定义:如果关系模式R的每个关系r的属性都是不可分的数据项,那么就称R是第一范式的模式。

      第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。

    第二范式(2NF)

      定义:如果关系模式R是1NF,且每个非主属性完全函数依赖于候选键,那么就称R是第二范式。

      第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。

      也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

      不符合第二范式的例子:  
      表:学号, 姓名, 年龄, 课程名称, 成绩, 学分;  

      存在问题:  

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

      修正: 

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


    第三范式(3NF)

      定义:如果关系模式R是2NF,且关系模式R(U,F)中的所有非主属性对任何候选关键字都不存在传递依赖,则称关系R是属于第三范式。  

      第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

      不符合第三范式的例子: 

      学号, 姓名, 年龄, 所在学院, 学院地点,学院联系电话,关键字为单一关键字"学号"; 

      存在依赖传递: (学号) → (所在学院) → (学院地点, 学院电话) 

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

      修正: 
      学生:(学号, 姓名, 年龄, 所在学院); 
      学院:(学院, 地点, 电话)。 

    总结

      1NF:确保每列保持原子性,字段不可分;   
      2NF:确保表中每列都和主键相关,非主键字段完全依赖主键,消除部分依赖;  
      3NF:确保每列都和主键列直接相关,而不是间接相关,消除传递依赖;  

  • 相关阅读:
    unix中的rm,rmdir的使用
    jQuery的学习笔记4
    jQuery的学习笔记2
    outlook 2016 for windows 每次刷新发送接收邮件会弹出登陆界面
    Azure SQL Data Warehouse
    Hadoop---Google MapReduce(转)
    Java 1.8特性
    SQL——Mysql数据库介绍
    接口和简单工厂设计模式
    自定义异常
  • 原文地址:https://www.cnblogs.com/mengchunchen/p/9034919.html
Copyright © 2020-2023  润新知