MySQL面试篇章——MySQL基础复习-范式

面试考点:范式的好处?

  • 减少数据冗余(主要好处)
  • 消除异常(插入异常、更新异常、删除异常)
  • 让数据组织变得更加和谐

注意:但是数据库范式不是越高越好,范式越高,意味着表越多,多表联合查询的机率就越大,SQL的效率就越低

第一范式(1NF)

每一列保持原子特性

列都是基本数据项,不能够再进行分割,否则设计成一对多的实体关系。

例如表中的地址字段AddressID,可以再细分为省、市、区等不可再分割的字段

在这里插入图片描述

注意:不符合第一范式的不能够称作关系型数据库

第二范式(2NF)

属性完全依赖于主键——主要针对联合主键

非主属性需要完全依赖于主关键字,如果不是完全依赖主键,需要拆分为新的实体,设计成一对多的实体关系。

例如选课关系表为SelectCourse(学号、姓名、年龄、课程名称、成绩、学分),而(学号、课程名称)是联合主键,但是学分字段只和课程名称有关,和学号无关,相当于只依赖于联合主键的其中一个字段,不符合第二范式。

在这里插入图片描述

第三范式(3NF)

属性不依赖于其他非主属性

要求一个数据库表中不包含已经存在于其他表中包含的非主关键字信息

例如:学生关系表Student(学号、姓名、年龄、所在学院、学院地点、学院电话),学号是主键,但是学院电话只依赖于所在学院,并不依赖于主键学号,因此该设计不符合第三范式,应该把学院专门设计成一张表,学生表和学院表,两个是一对多的关系。
在这里插入图片描述

注意:一般关系型数据库只需要满足第三范式就可以了

BC范式(BCNF)

每个表中只有一个候选键

简单来说,BC范式是在第三范式的基础上的一种特殊情况,即每个表中都只有一个候选键(在一个数据库中每行的值都不相同,则可称为候选键),再上面第三范式的noNF表中可以看出,每一个员工的email都是唯一的(不可能两个人用同一个email),则该表不符合BC范式,对其进行BC范式化。

在这里插入图片描述

第四范式(4NF)

消除表中的多值依赖

简单来说,第四范式就是要消除表中的多值依赖,也就是说可以减少维护数据一致性的工作。比如图4中的noNF表中的skill技能这个字段,有的人是“java,mysql”,有的人描述的是“Java,MySQL”,这样数据就不一致了,解决办法就是将多值属性放入一个新表,所以满足第四范式的关系图如下:

在这里插入图片描述

总结:从上面对于数据库范式进行分解的过程中不难看出,应用的范式越多,表越多。而表多会带来很多问题:

  • 查询时需要连接多个表,增加了SQL查询的复杂度
  • 查询时需要连接多个表,降低了数据库查询性能

因此,并不是应用的范式越高越好,要视情况而定。第三范式已经很大程度上减少了数据冗余,并且基本预防了数据插入异常,更新异常,删除异常

上一篇:c++ extern 关键字


下一篇:智能招聘系统的AI功能解析