数据库范式概述

数据库的范式也是面试常见的基础问题之一,这里我结合它们的定义讲一讲我自己的理解


数据库第一范式:

数据库表的每一列都是不可分割的基本数据项
在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。

第一范式不需要解释,容易理解

数据库第二范式:

数据库表中不存在非关键字段对任一候选键的部分函数依赖,也即所有非关键字段都完全依赖于任意一组候选关键字。

在关系数据库中,我们根据候选关键字就可以查找到非关键字段,不能有歧义。

第二范式建立在第一范式之上。

比如我们有A(候选关键字)、B、C三列,B、C为非关键字段。

那么只要A的值定了,B、C就能确定。 如果C的值需要A、B共同确定,那就不符合第二范式。

数据库第三范式:

在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。

传递函数其实就是有一层冗余的关系。比如我们有A(候选关键字)、B、C三列,B、C为非关键字段。A与C的对应总依赖于B,则不符合第三范式。

一般了解到这里就行了,BCNF问的很少。

但是三范式并不是硬性规定,它只是“范式”而已。

关系数据库的表可以是范式化的,也可以是反范式化的,关键是看我们对“冗余”的态度。至于非关系型数据库,也谈不上范式,反而更加灵活高效。

范式化的表,不记录冗余的关系,因此它相对小一些,可以更好地放在内存里,执行速度快;

范式化的表一般更新速度更快,反范式化的表在一次关系的变化中要更改多处的内容;

范式化的表较少使用DISTINCT和GROUP BY;

但也有这样一个问题:

一次复杂的查询需要多次关联,因为范式的要求使得表需要拆分;

因此在实际操作中,范式化和反范式化都是可以考虑的,也可以混用范式化和反范式化。

猜你喜欢

转载自www.cnblogs.com/sh1296/p/10908589.html