码迷,mamicode.com
首页 > 数据库 > 详细

数据库设计的三大范式

时间:2018-03-13 15:43:27      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:第二范式   str   hone   关系数据库   简单   数据   研究   一个   blog   

什么是范式:为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。

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

一般在项目中,前三种方式就满足我们的需求了

第一范式:

  简单的说,数据表中的每一列(每个字段)必须是不可拆分的最小单元。每一个属性都是原子项,不可分割。
  第一范式是关系模式应具备的最起码的条件,如果数据库设计不能满足第一范式,就不称为关系型数据库。关系数据库设计研究的关系规范化是在1NF之上进行的。

  例如(学生信息表):
  学生编号   姓名   性别       联系方式
  20080901    张三     男   email:zs@126.com,phone:88886666
  20080902    李四     女   email:ls@126.com,phone:66668888

以上的表就不符合,第一范式:联系方式字段可以再分,所以变更为正确的是:

  学生编号   姓名   性别     联系方式     电话
  20080901    张三     男   email:zs@126.com  88886666
  20080902    李四     女   email:ls@126.com  66668888

第二范式(2NF)
简单的说,第二范式要满足以下的条件:首先要满足第一范式,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说一个表只描述一件事情

  例如(学生选课表):
  学生   课程     教师     教师职称       教材       教室   上课时间
  李四   Spring   张老师   java讲师   《Spring深入浅出》   301   08:00
  张三   Struts    杨老师   java讲师   《Struts in Action》   302   13:30

这里通过(学生,课程)可以确定教师、教师职称,教材,教室和上课时间,所以可以把(学生,课程)作为主键。但是,教材并不完全依赖于(学生,课程),只拿出课程就可以确定教材,因为一个课程,一定指定了某个教材。这就叫不完全依赖,或者部分依赖。出现这种情况,就不满足第二范式。

  修改后,选课表:
  学生   课程     教师      教师职称   教室   上课时间
  李四   Spring   张老师   java讲师   301   08:00
  张三   Struts    杨老师   java讲师   302   13:30

课程表:
  课程       教材 
  Spring   《Spring深入浅出》 
  Struts   《Struts in Action》

所以,第二范式可以说是消除部分依赖。第二范式可以减少插入异常,删除异常和修改异常。

第三范式(3NF)
第三范式要满足以下的条件:首先要满足第二范式。要求:表中的每一列只与主键直接相关而不是间接相关,

上例中修改后的选课表中,一个教师能确定一个教师职称。这样,教师依赖于(学生,课程),而教师职称又依赖于教师,这叫传递依赖。第三范式就是要消除传递依赖。

  修改后,选课表:

  学生   课程        教师    教室   上课时间
  李四   Spring   张老师   301   08:00
  张三   Struts    杨老师   302   13:30

  

    教师表:
    教师   教师职称
  张老师   java讲师
  杨老师   java讲师

这样,新教师的职称在没被选课的时候也有地方存了,没人选这个教师的课的时候教师的职称也不至于被删除,修改教师职称时只修改教师表就可以了。

简单的说,
第一范式就是原子性,字段不可再分割;
第二范式就是完全依赖,没有部分依赖;
第三范式就是没有传递依赖。

数据库设计的三大范式

标签:第二范式   str   hone   关系数据库   简单   数据   研究   一个   blog   

原文地址:https://www.cnblogs.com/Demon-Mx/p/8556253.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!