第一范式(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...

面试题 相关文章推荐
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
Jul 30 面试题
数组越界问题
Oct 21 面试题
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
Sep 06 面试题
STP的判定过程
Oct 01 面试题
如果有两个类A,B,怎么样才能使A在发生一个事件的时候通知B
Mar 12 面试题
如何用Java判断一个文件或目录是否存在
Nov 19 面试题
this关键字的作用
Jan 30 面试题
重写子类方法时,抛出异常的书写注意事项
Oct 17 面试题
Java如何支持I18N?
Oct 31 面试题
UNIX文件系统常用命令
May 25 面试题
给定一个时间点,希望得到其他时间点
Nov 07 面试题
什么是ESB?请介绍一下ESB?
May 27 面试题
介绍一下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源码之explode使用说明
2011/08/05 PHP
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
2011/08/23 PHP
php图像处理函数大全(推荐收藏)
2013/07/11 PHP
php分页函数示例代码分享
2014/02/24 PHP
详解WordPress中给链接添加查询字符串的方法
2015/12/18 PHP
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
2013/04/08 Javascript
js通过地址栏给action传值(中文乱码全是问号)
2013/05/02 Javascript
JS/FLASH实现复制代码到剪贴板(兼容所有浏览器)
2013/05/27 Javascript
当jquery ajax遇上401请求的解决方法
2016/05/19 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
jquery操作ID带有变量的节点实例
2016/12/07 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
2017/03/03 Javascript
一步步教你利用Canvas对图片进行处理
2017/09/19 Javascript
JavaScript实现的贝塞尔曲线算法简单示例
2018/01/30 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
python ChainMap 合并字典的实现步骤
2019/06/11 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
django实现支付宝支付实例讲解
2019/10/17 Python
最小二乘法及其python实现详解
2020/02/24 Python
python正则表达式实例代码
2020/03/03 Python
python 字典item与iteritems的区别详解
2020/04/25 Python
python语言中有算法吗
2020/06/16 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
2020/06/24 Python
详解CSS3选择器:nth-child和:nth-of-type之间的差异
2017/09/18 HTML / CSS
捷克体育用品购物网站:D-sport
2017/12/28 全球购物
专科毕业生就业推荐信
2013/11/01 职场文书
大学生两会精神学习心得体会
2014/03/10 职场文书
公司廉洁自律承诺书
2014/03/27 职场文书
统计学教授推荐信
2014/09/18 职场文书
网络营销计划
2015/01/17 职场文书
欠条样本
2015/07/03 职场文书
MySQL 使用自定义变量进行查询优化
2021/05/14 MySQL
手残删除python之后的补救方法
2021/06/26 Python
台积电称即便经济低迷也没有降价的计划
2022/04/21 数码科技