一、1NF

1.1 1NF的定义:

关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同的范式。满足最低要求是第一范式(1NF),1NF的定义如下:
1NF:关系中的每一个分量必须是一个不可分的数据项。
通俗地说,第一范式就是表中不允许有小表的存在。比如,对于如下的员工表,就不属于第一范式:

上表中,出现了属性薪资又被分为基本工资和补贴两个子属性,就好像表中又分割了一个小表,这就不属于第一范式。如果将基本工资和补贴合并,那么该表符合1NF。

1.2 1NF存在的问题

1NF是最低一级的范式,范式程度不高,存在很多的问题。比如用一个单一的关系模式学生来描述学校的教务系统:
学生(学号,学生姓名,所在系,系主任姓名,课程号,成绩)
学生表

假如选定学号为主键,这个表满足第一范式,但是存在如下问题:
·数据冗余:
一个系有很多的学生,同一个系的学生的系主任是相同的,所以系主任名会重复出现。
·更新复杂:
当一个系换了一个系主任后,对应的这个表必须修改与该系学生有关的每个元组。
·插入异常:
如果一个系刚成立,没有任何学生,那么这个无法把这个系的信息插入表中。
·删除异常:
如果一个系的学生都毕业了,那么在删除该系学生信息时,这个系的信息也丢了。

二、2NF

2.1 2NF的定义:

2NF的定义如下:

如果关系R属于1NF,且每一个非主属性完全函数依赖于任何一个候选码,则R属于2NF。

通俗地说,2NF就是在1NF的基础上,表中的每一个非主属性不会依赖复合主键中的某一个列。

按照定义,上面的学生表就不满足2NF,因为学号不能完全确定课程号和成绩(每个学生可以选多门课)。将学生表分解为:学生(学号,学生姓名,系编号),系(系编号,系名,系主任),选课(学号,课程号,成绩)。每张表均属于2NF。

新定义一张表:销售表(产品id,地区id,价格,产品名),同一个产品在不同地区价格不同。这个表就不属于2NF,因为非主属性产品名不是完全函数依赖于主键,而是完全依赖于产品id,即表中存在非主属性对主键的部分依赖。将销售表分解:产品(产品id,产品名),销售表(产品id,地区id,价格)。每张表均属于2NF。

2.2 2NF存在的问题:

下面举例说明2NF存在的相应问题。

对于公司里的员工管理,每个员工只能属于一个部门,每个部门可以有多个员工,定义如下关系模式:

员工管理表(员工id,员工名,所属部门id,部门经理);

对应的表:

存在的问题:
1、删除异常:
如果某个部门的人都跳槽了,那么在删除这些员工的同时也丢失了这个部门的信息。
2、修改复杂:
如果一个员工换了一个部门,不但要修改所属部门,还要修改部门经理这个属性列。
3、插入异常:
如果公司新成立了一个部门,但是目前没有招收员工,那么这个部门信息也无法插入到这个表中,因为没有主键。

三、3NF

3.1 3NF的定义:

3NF的严格定义如下:

关系模式R属于1NF,若R中不存在这样的码X,属性组Y及非主属性Z,使得X函数确定Y、Y函数确定Z成立,Y不能函数确定X,则称R是属于3范式的。

通俗地说,就是在满足1NF的基础上,表中不存在非主属性对码的传递依赖。也就是说表中非主属性不会间接地依赖于码。

如上面的员工管理表就不属于3NF,因为非主属性部门经理依赖于所属部门,所属部门依赖于员工id,即部门经理传递依赖于员工id。将员工管理表分解:员工管理(员工id,员工名,部门名),部门(部门名,部门经理)。则每张表均属于3NF。

3.2 3NF存在的问题:

现在有这样的一个场景:对于一个工程(ENO)的实施,每个工程需要多个零件,每个供应商(SNO)只生产一个零件(PNO)且受工厂规模所限只能同时供应一个工程,每个工程使用的同一个零件都来自同一个生产商。

定义关系模式:SPE(SNO,PNO,ENO)。

上表中存在如下函数依赖:
(ENO,PNO)→SNO
(ENO,SNO)→PNO
SNO→PNO
SPE是属于3NF的,因为根据定义,表中不存在非主属性对码的传递依赖和部分依赖。但是这张表存在如下的问题:
1、插入异常:
如果有一个新的工厂建立了,但是这家工厂还没有接到任何订单,那么无法将这个工厂信息插入到SPE中,因为缺少了主属性ENO。
2、删除异常:
如果某个供应商只给一个工程提供零件,现在这个工程不再需要这个零件了。那么PNO就要删除,而PNO是主属性,整个元组都被删除了,这样就丢失了一个供应商信息。

四、BCNF

4.1 BCNF的定义:

BCNF比3NF更进一步,可以认为是扩充的3NF,其定义如下:

关系模式R属于1NF,若X函数确定Y(且X不包含Y)时X必含有码,则R属于BCNF。

翻译成人话,就是在第一范式的基础上,若关系R中的每一个决定因素都必含有码,则关系R属于BCNF。

很显然,上面的SPE表不属于BCNF,因为SPE中存在一个决定因素SNO,SNO不含有码。将SPE表分解:SP(SNO,PNO),SE(SNO,ENO)。则每张表均属于BCNF。

4.2 BCNF存在的问题:

仍以上面的工程实施场景为例:假设每个供应商可以生产多个零件,可以供应给多个工程,一个工程需要多个零件,但同一个工程的同一个零件必须来自同一个供应商。

那么关系SPE(SNO,PNO,ENO)对应的表数据可能是如下:

此时表SPE存在如下的函数依赖:
(PNO,ENO)→SNO

根据BCNF的定义,此时表SPE属于BCNF。但是这样的关系模式仍具有不好的地方:数据冗余度太大。假如供应商S3生产了n个零件,每个零件供应给m个工程,那么显然S3要在表中重复m*n次。

五、4NF

5.1 4NF的定义:

严格定义如下:
关系模式R属于1NF,对于R中的每一个非平凡多值依赖X→→Y(X不包含Y),X都含有码,则R属于4NF。

通俗地说,对于有三个属性的表,给定属性A一个值,剩余两个列之间不存在多对多的关系。例如,在上面的SPE表中,给定SNO=S1,PNO和ENO之间很明显存在多对多的关系,故上表是不属于4NF的。

根据4NF的定义可知,4NF所允许的非平凡的多值依赖实际上就是函数依赖,4NF就是消除表中的非平凡多值依赖关系。

5.2 4NF存在的问题:

一般地,4NF属于规范程度比较高的范式了。但是考虑到连接依赖的话,4NF中也仍存在数据冗余,插入、修改、删除异常等问题。如果消除了4NF中的连接依赖,则达到了5NF的关系模式;5NF范式化已经很高了,实际工作中很少会遇到这么高的范式表,这里就不再叙述了。

六、范式的相关总结:

如果只考虑函数依赖,那么BCNF范式最彻底,已消除插入和删除的异常。而3NF的不彻底性表现在表中可能存在主属性对码的部分依赖和传递依赖。

如果考虑到多值依赖,那么4NF范式是规范程度最高的。但4NF中可能存在连接依赖的关系,而5NF可以消除连接依赖。

在数据库中,有时并不是规范化程度越高越好,有时候也需要逆范式化设计表。因为范式越高,产生的表就越多,一个简单的查询需求就可能涉及到多张表的关联,影响查询效率。一般地,数据库中的表都在3NF。

解析范式(1NF-4NF)相关推荐

  1. 数据库范式解析(1NF 2NF 3NF BCNF)

    数据库设计范式是关系型数据库的设计准则.其目的在于通过规划设计使得数据库结构合理,尽量减少数据冗余,消除存储异常,方便数据的插入.更新和删除操作.目前常用范式包括1NF(第一范式).2NF(第二范式) ...

  2. 数据库范式1NF 2NF 3NF BCNF

    设计范式(范式,数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合.构造数据库必须遵循一定的规则.在关系数据库中,这种规则就是范式.关系数据库中的关系必须满足一定的要求,即满足不同的范 ...

  3. 数据库范式 1NF, 2NF, 3NF的问题与细解

    转自https://www.jianshu.com/p/94a274ef35a9 一. 关于数据冗余与异常 数据库的规范化 数据库规范化是一种在数据库中组织数据的技术. 规范化是消除冗余(重复)和不良 ...

  4. 【转】关系型数据库的设计范式 1NF 2NF 3NF BCNF

    本文转载自:https://www.cnblogs.com/langdashu/p/5924082.html 一.缘由: 要做好DBA,就要更好地理解数据库设计范式.数据库范式总结概览: 为了更好地理 ...

  5. 范式1NF,2NF,3NF

    范式 关系数据库中的关系要满足一定要求的,满足不同程度的要求的为不同的范式. 各种范式之间的关系 5NF⊂4NF⊂BCNF⊂3NF⊂2NF⊂1NF 1NF: 作为一个二维表,关系要符合一个最基本的田间 ...

  6. 数据库范式1NF 2NF 3NF BCNF通俗讲解

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

  7. 数据库范式1NF 2NF 3NF详细阐述

    范式:关系数据库中的关系是要满足一定要求的,满足不同程度要求的不同范式.满足最低要求的叫第一范式,简称1NF ,在第一范式中满足进一步要求的为第二范式,其余以此类推.通俗来说是满足数据库关系表中的一套 ...

  8. MYSQL学习笔记06:列属性[NULL,default,comment],主键,自增长,唯一键,数据库设计规范[范式(1NF,2NF,3NF),逆规范化],表关系[1V1,1VN,NVN]

    列属性 列属性又称为字段属性. 在mysql中一共有6个属性:null,默认值,列描述,主键,唯一键和自增长. NULL属性 NULL属性代表字段为空. 如果对应的值为yes表示该字段允许为null, ...

  9. 范式1NF、2NF、3NF和BCNF的区别

    1NF:二维表中数据项不可再分就满足1NF条件.也就是说只要是正确的二维表都 满足这个条件. 主属性:候选码的每一个属性. 完全函数依赖:举个例子(Sno,Cno)->Grade.Sno-/&g ...

最新文章

  1. 数字图像处理——第四章 频率域滤波
  2. 小姐姐在硅谷生活了三年,实现了理想的生活模式
  3. 新买的电脑怎么装系统_如何装一台性价比的电脑主机——老程带你了解怎么装电脑...
  4. 【博客话题】感谢您,我的老师
  5. 神策数据荣获“2017金融科技·大数据优秀案例之最佳实践案例奖”
  6. 酷派COOL 20 Pro影像大升级:搭载5000万AI三摄 主攻夜景
  7. python按行读取csv文件_python.csv 按行按列读取
  8. 深入理解分布式事务(XA及rocketmq事务)
  9. 快速突破面试算法之搜索算法篇
  10. 从微软和思科的 IT 服务化转型过程中得到的几点思考
  11. 饥荒联机一直显示正在启动服务器,饥荒联机版一直正在启动服务器 | 手游网游页游攻略大全...
  12. bin文件转化为csv文件
  13. Pytorch mask:上三角和下三角
  14. html向下三角箭头,CSS制作三角箭头(兼容IE6)
  15. 【NOIP提高组五校联考】挖金矿
  16. 余世维《有效沟通》讲义1
  17. 根据GEOHASH,查找附近的人,判断距离远
  18. 用python画雪花飘落_python实现雪花飘落效果实例讲解
  19. RGB三原色的简单理解
  20. macbook pro音质测试软件,【苹果 MacBook Pro 笔记本电脑使用总结】屏幕|性能|音质|续航_摘要频道_什么值得买...

热门文章

  1. 线性代数拾遗(1)—— 行列式的三种公理化构造
  2. 内网穿透远程访问家里的群晖NAS 1-2
  3. git命令移动文件夹到另一文件夹
  4. Cmd 移动文件夹及文件
  5. 《大话计算机》动图一则展示
  6. SitePoint播客#87:MeltSheep和FireRock
  7. 有哪些计算机语言可以爬虫,爬虫是干嘛的?用什么语言学爬虫好?
  8. ipad分屏功能怎么开启_iPad 重大更新!14个新功能,每个都很实用
  9. 把一个字符串13579先变成Array——[1, 3, 5, 7, 9],再利用reduce(),就可以写出一个把字符串转换为Number的函数。
  10. 人脸检测之Ultra-Light-Fast-Generic-Face-Detector-1MB