数据库三范式

  数据库范式是数据库设计中必不可少的知识,没有对范式的理解,就无法设计出高效率、优雅的数据库。甚至设计出错误的数据库。而想要理解并掌握范式却并不是那么容易。教科书中一般以关系代数的方法来解释数据库范式。这样做虽然能够十分准确的表达数据库范式,但比较抽象,不太直观,不便于理解,更难以记忆。

一、第一范式

  数据库表的每一项都是不可分割的原子数据项,不能是集合。比如班级信息表里面不能有班级的学生。
  不满足第一范式的数据库,不是关系数据库!所以,我们在任何关系数据库管理系统中,做不出这样的“表”来
在这里插入图片描述
对上述情况可以做成这样的表:这个表中,属性 “分”了。也就是“电话”分为了“手机”和“座机”两个属性:
在这里插入图片描述

二、第二范式

  在第一范式的基础上,所有属性完全依赖于主键,完全依赖就是不能只是取决于主键的一部分。
在这里插入图片描述
一年级语文肯定用的是《小学语文1》,那么就有课程->教材。(学生,课程)是主键,课程却决定了教材,这就叫做不完全依赖,或者说部分依赖。出现这样的情况,就不满足第二范式!那应该怎么解决呢?投影分解,将一个表分解成两个或若干个表:
在这里插入图片描述
在这里插入图片描述

三、第三范式

  在第二范式的基础上,消除传递依赖,比如学生表里有学生属于的班级编号,但不能有班级的名称,班级人数等班级信息,因为班级信息可有由班级编号通过班级表推出来,有传递依赖。
在这里插入图片描述
上面的“学生上课新表”符合2NF,但是它有传递依赖!在哪呢?问题就出在“老师”和“老师职称”这里。一个老师一定能确定一个老师职称。(学生,课程)->老师->职称。那应该怎么解决呢?和上面一样,投影分解:
在这里插入图片描述
在这里插入图片描述

转自:https://www.cnblogs.com/lca1826/p/6601395.html

你可能感兴趣的:(#,MySQL)