第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?


Posted in 面试题 onApril 28, 2016
构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求,即满足不同的范式。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。下面我们举例介绍第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。

3.4.1 第一范式(1NF)
在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。例如,对于图3-2 中的员工信息表,不能将员工信息都放在一列中显示,也不能将其中的两列或多列在一列中显示;员工信息表的每一行只表示一个员工的信息,一个员工的信息在表中只出现一次。简而言之,第一范式就是无重复的列。

3.4.2 第二范式(2NF)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。如
图3-2 员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分。这个惟一属性列被称为主关键字或主键、主码。
第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是非主属性非部分依赖于主关键字。

3.4.3 第三范式(3NF)
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在图3-2
的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。
所谓范式就是符合某一种级别的关系模式的集合。通过分解把属于低级范式的关系模式转换为几个属于高级范式的关系模式的集合。这一过程称为规范化。

1、 第一范式(1NF):一个关系模式R的所有属性都是不可分的基本数据项。
2、 第二范式(2NF):关系模式R属于第一范式,且每个非主属性都完全函数依赖于键码。
3、 第三范式(3NF):关系模式R属于第一范式,且每个非主属性都不伟递领带于键码。
4、 BC范式(BCNF):关系模式R属于第一范式,且每个属性都不传递依赖于键码。

Tags in this post...

面试题 相关文章推荐
接口中的方法可以是abstract的吗
Jul 23 面试题
char型变量中能不能存贮一个中文汉字
Jul 08 面试题
大整数数相乘的问题
Jul 22 面试题
C++:memset ,memcpy和strcpy的根本区别
Apr 27 面试题
下面关于"联合"的题目的输出是什么
Aug 06 面试题
怎么可以提高数据库查询数据的速度
Jun 28 面试题
C#实现启动一个进程
Oct 01 面试题
Linux如何为某个操作添加别名
Mar 01 面试题
软件测试面试题
Oct 21 面试题
三个Unix的命令面试题
Apr 12 面试题
如何将一个描述日期或日期/时间的字符串转换为一个Date对象
Oct 13 面试题
在DELPHI中调用存储过程和使用内嵌SQL哪种方式更好
Nov 22 面试题
介绍一下sql server的安全性
Aug 10 #面试题
汇智创新科技发展有限公司
Dec 06 #面试题
如何提高SQL Server的安全性
Jul 25 #面试题
北京华建集团SQL面试题
Jun 03 #面试题
SQL语言面试题
Aug 27 #面试题
SQL Server数据库笔试题和答案
Feb 04 #面试题
杭州时比特电子有限公司SQL
Aug 22 #面试题
You might like
PHP 最大运行时间 max_execution_time修改方法
2010/03/08 PHP
php smarty truncate UTF8乱码问题解决办法
2014/06/13 PHP
php封装一个异常的处理类
2017/06/08 PHP
javascript针对DOM的应用分析(二)
2012/04/15 Javascript
javascript加号"+"的二义性说明
2013/03/04 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
JQuery页面地址处理插件jqURL详解
2015/05/03 Javascript
在vue.js中抽出公共代码的方法示例
2017/06/08 Javascript
angular框架实现全选与单选chekbox的自定义
2017/07/06 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
2017/08/24 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
2017/12/20 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
2018/03/02 Javascript
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
vue项目打包上传github并制作预览链接(pages)
2019/04/19 Javascript
函数式编程入门实践(一)
2019/04/20 Javascript
vue项目中将element-ui table表格写成组件的实现代码
2019/06/12 Javascript
解决layui富文本编辑器图片上传无法回显的问题
2019/09/18 Javascript
解决vue初始化项目一直停在downloading template的问题
2020/11/09 Javascript
[00:12]DAC2018 天才少年转战三号位,他的SOLO是否仍如昔日般强大?
2018/04/06 DOTA
[54:17]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第二场 1月10日
2021/03/11 DOTA
[05:23]DOTA2-DPC中国联赛2月1日Recap集锦
2021/03/11 DOTA
关于python的bottle框架跨域请求报错问题的处理方法
2017/03/19 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
2018/04/10 Python
Python 中导入csv数据的三种方法
2018/11/01 Python
python flask几分钟实现web服务的例子
2019/07/26 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
2020/03/25 Python
CSS3教程(4):网页边框和网页文字阴影
2009/04/02 HTML / CSS
Canvas在超级玛丽游戏中的应用详解
2021/02/06 HTML / CSS
Get The Label中文官网:英国运动时尚购物平台
2017/04/19 全球购物
教师节活动主持词
2014/04/02 职场文书
做一个有道德的人演讲稿
2014/05/14 职场文书
出国签证在职证明
2014/09/20 职场文书
2014年公务员退休工资改革方案
2014/10/01 职场文书
党支部2014年度工作总结
2014/12/04 职场文书
公司开业主持词
2015/07/02 职场文书
Java 常见的限流算法详细分析并实现
2022/04/07 Java/Android