前言

在了解1NF、2NF、3NF、BCNF之前,我们需要先知道几个概念

  • 函数依赖
  • 完全函数依赖
  • 部分函数依赖
  • 决定因素

什么是函数依赖?

答:在关系r中,r中不可能存在两个元组在X上的属性值相等,而在Y的属性值不等,则称X函数确定Y,也称Y函数依赖于X,记作X->Y.
举例:对于姓名->年龄 想想看,只有i当姓名不重时,姓名才可以决定年龄,才能称年龄依赖于姓名,否则就不满足函数依赖。

什么是完全函数依赖?

答:如果X决定Y,但X的任何真子集都无法决定Y,那么称Y对X完全函数依赖。

什么是部分函数依赖?

答:部分函数依赖可以看作是相对于完全函数依赖而言的。如果X决定Y,但Y不对X完全函数依赖,那就是部分函数依赖

什么是决定因素?

若X可决定Y,则X称为这个函数依赖的决定属性组,也成为决定因素。

什么是码、候选码、主码?

答:主码 (属于) 候选码 (属于) 码。
码是可以确定一个元组的所有信息的属性名或属性名组。
候选码的真子集中不存在码。
主码是任意一个候选码

1NF

第一范式是指列的原子性,列不可再分。

例如下图就不符合第一范式

说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。

2NF

第二范式是指在1NF基础上消除部分函数依赖

看定义可能不好理解,看看下面例子,再回来理解一下。

假定选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),关键字为组合关键字(学号, 课程名称),因为存在如下决定关系:

(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)

这个数据库表不满足第二范式,因为存在如下决定关系:

(课程名称) → (学分)

(学号) → (姓名, 年龄)

3NF

第三范式是指在2NF基础上消除传递依赖

什么是传递依赖?

例如A->B->C,A决定B,B决定C,反过来讲就是C依赖B,B依赖A,传递起来就是C依赖于A。

如果在2NF基础上,没有这样的传递依赖,我们称之为3NF。

假定学生关系表为Student(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话),关键字为单一关键字"学号",因为存在如下决定关系:

(学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话)

这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:

(学号) → (所在学院) → (学院地点, 学院电话)

也就是意味着,在数据库表设计中,学院与学院地点、学院电话应该独立出去为表,从而满足第三范式。

BCNF

通常认为是修正的第三范式,若每一个决定因素都包含码,则该关系属于BCNF。

BCNF是第三范式的改进,也就是说如果是BCNF,则一定是3NF。反之则不是。
BCNF消除了主属性对候选码的部分和传递函数依赖, 即3NF是允许存在主属性对候选码的传递依赖和部分依赖的。

BCNF比较抽象,举个例子:在学生信息表里,学号是一个候选码,学号可确定学生姓名;(班级,学生姓名)也是一组候选码,有(班级,学生姓名)->学号,因此在主属性间形成了传递依赖。

参考文章

《 数据库系统概论 》王珊版
https://www.cnblogs.com/haore147/p/3902968.html
https://blog.csdn.net/cry_shoulder/article/details/94549319
https://blog.csdn.net/sumaliqinghua/article/details/86246762

数据库 1NF、2NF、3NF、BCNF相关推荐

  1. 理解数据库 1NF 2NF 3NF BCNF

    参考文章写的非常不错,给自己解惑了 参考文章: https://www.zhihu.com/question/24696366 首先是范式的定义 范式是"符合某一种级别的关系模式的集合,表示 ...

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

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

  3. 【数据库】范式理解:1NF,2NF,3NF,BCNF,4NF详析

    数据库入门(一)范式理解:1NF,2NF,3NF,BCNF,4NF详析 引言 范式种类 第一范式(1NF) 符合1NF的关系中的每个属性都不可再分 存在问题 第二范式(2NF) 在1NF基础上消除了非 ...

  4. 数据库1NF 2NF 3NF范式解释

    数据库1NF 2NF 3NF范式解释 定义 范式(NF)"是什么意思.按照教材中的定义,范式是"符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度&quo ...

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

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

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

    数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的.结构明晰的,同时,不会发生插入(insert).删除(delete)和更新(update)操作异常.反之则是乱七八糟,不仅给 ...

  7. 数据库六种范式详解(1NF/2NF/3NF/BCNF/4NF/5NF)

    目录 数据库的基本概念 函数依赖 函数依赖的定义 函数依赖与属性的关系 六种范式 第一范式(1NF) 第二范式(2NF) 第三范式(3NF) 巴斯-科德范式(BCNF,Boyce-Codd Norma ...

  8. 数据库范式(1NF 2NF 3NF BCNF)详解一

    数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的.结构明晰的,同时,不会发生插入(insert).删除(delete)和更新(update)操作异常.反之则是乱七八糟,不仅给 ...

  9. mysql bcnf_数据库范式(1NF 2NF 3NF BCNF)详解一

    数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的.结构明晰的,同时,不会发生插入(insert).删除(delete)和更新(update)操作异常.反之则是乱七八糟,不仅给 ...

  10. mysql中bcnf_数据库范式(1NF 2NF 3NF BCNF)详解

    @hxx: http://blog.sina.com.cn/u/3113060227 简介:一范式:每一列不可分割,二范式:每一列唯一(对应唯一对象):三范式:一列中的非主关键列不应该在其他表(或自己 ...

最新文章

  1. 只知道GAN你就OUT了——VAE背后的哲学思想及数学原理
  2. 最新版Kubernetes常用命令大全
  3. 容器技术之快速了解K8S各抽象资源及组件架构
  4. 【报告分享】迈向更好的教育:未来教育的技术空间研究报告.pdf(附下载链接)
  5. exe4j生成的exe反编译
  6. 跟我学系列,走进Scrapy爬虫(六)Spiders爬虫
  7. 什么是黑盒测试?它的常用方法有哪些?
  8. MQTT:Massage Queue Telemetry Transport消息队列遥测传输
  9. 每月碎碎念 | 2019.08
  10. 沃通PDF签名证书 保障电子发票真实有效
  11. JAVA中的各种引用
  12. 中小企业存储集群系统建设方案
  13. Python 办公小助手:读取 PDF 中表格并重命名
  14. 一文搞懂,PO设计模式详解
  15. 高德地图Amap开发实践
  16. 2021年中国潮流玩具市场现状分析,乘Z世代人群消费东风产业快速扩张「图」
  17. C语言访问数组的常用方法,C语言数组基本知识点详解
  18. css实现滚动条美化功能
  19. mysql 结构化数据库_【MySQL】——MySQL数据库和SQL结构化查询语言概述
  20. Python turtle 学习之画个五角星

热门文章

  1. Unity 1.Roll a Ball
  2. 《策略投资》第1、2章读书分享
  3. Android Studio 模拟器重启(解决模拟器卡死问题)
  4. React+dva多图片上传
  5. 接口测试二(App抓包)
  6. 一千万人都在等小黄车OFO退押金
  7. iOS内存管理——alloc/release/dealloc方法的GNUstep实现与Apple的实现
  8. halcon程序安装破解与VC6.0结合
  9. 【SVAC】国家视频编解码标准SVAC的特色和优势
  10. psd格式图片一键切图