数据库范式概述

数据库范式解析及范式化与反范式化探讨
博客结合定义讲解数据库第一、二、三范式,指出第一范式是基本要求,第二范式建立在第一范式之上,第三范式在第二范式基础上消除传递函数依赖。还提到三范式并非硬性规定,关系数据库表有范式化和反范式化之分,实际操作中可按需选择或混用。

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


 

数据库第一范式:

数据库表的每一列都是不可分割的基本数据项
在任何一个关系数据库中,第一范式(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;

 

但也有这样一个问题:

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

 

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

 

转载于:https://www.cnblogs.com/sh1296/p/10908589.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值