文章目录

  • 数据库范式概念
  • 第一范式(1NF)
  • 第二范式(2NF)
    • 不满足第2范式可能出现的问题
  • 第三范式(3NF)
  • NC范式(BCNF)
  • 总结(考试要考)

数据库范式概念

数据库范式:Normal form,缩写(NF)。按照经典教材——《数据库系统概论》中的定义:范式是 “符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”。对没错,这就是天书级别的解释,讲中文翻译成白话中文可以理解为:

范式是用来衡量一组数据表是否符合某种设计标准的级别。就像家里装修买建材,最环保的是E0级,其次是E1级,还有E2级等等。
数据库范式也分为1NF,2NF,3NF,BCNF,4NF,5NF。一般在我们设计关系型数据库的时候,最多考虑到BCNF就够。

满足最低要求的称为 1NF,在 1NF 的基础上进一步满足一些新要求的称为 2NF,以此类推,满足高级范式的一定满足低级范式,但满足低级范式的不一定满足高级范式。注意敲黑板化重点此处考试要考

第一范式(1NF)

R 为任一给定关系,若果 R 中每个列与行的交点处的取值都是不可再分的基本元素,则 R 为第一范式。

简单的说,强调的是列的原子性,即列不能够再分成其他的几列

第一范式是一个关系型数据库的最低标准,如果不满足第一范式,那么这个数据库就不是关系型数据库(划重点),来一个不符合第一范式的举例:

可以看出"图书列"有两个值图书号书名两列,很明显这两个值可以再进行拆分,所以不满足第一范式。如果将该表规范到1NF可以拆分成如下表:

Redis关系型数据库,因为他的一个字段值可以是一个Map,其中存在key、value。key可以是字符型,value可以是日期型。故其不满足1NF,也就不能是关系型数据库了。

第二范式(2NF)

R 为任一给定关系,若 R 为 1NF,且其所有非主属性都完全函数依赖于候选关键字,则 R 为第二范式。

简单的说,第二范式要满足以下的条件:

  1. 要满足第一范式
  2. 每个非主属性要完全函数依赖于候选键,或者是主键(主码)

根据定义可以总结出:**只有在复合字段作主键时,才可能出现不满足2NF的情况。**第2范式告诉我们,不能使用组合键(联合主键/复合键),要使用唯一主键。

针对1NF中的例子,假设例子中的主表主键为:读者号、图书号、借阅日期时,
非主属性姓名,单位号只依赖于读者号,和非主属性书名只依赖于图书号,即与关键码(读者号,图书号,借阅日期)存在部分函数依赖。故不属于 2NF,最高属于 1NF。

如若更改其满足2NF,则需拆分成如下表:

R1(读者号,姓名,单位号,单位名)
R3(图书号,书名)
R4(读者号,图书号,借阅日期,还书目期)

不满足第2范式可能出现的问题

  1. 数据冗余:若《周易》本书被同一个单位的人借 100 次,那么这个单位的单位名被重复记录100 次,造成大量数据冗余。
  2. 更新异常:若图书号对应的图书名字要变更,则需要将表中所有数据更新,不然可能会造成
  3. 插入异常:若《论语》这本书还没有被借出,那么这本书的基本信息将无法存储到这个关系中去,就会出现插入异常的问题。
  4. 删除异常:删除读者借阅图书信息时可能把读者的基本信息也删除了。

第三范式(3NF)

R 为任一给定关系,若 R 为 2NF,且其每一个非主属性都不传递函数依赖于候选关键字,则 R 为第三范式。

简单的说,第三范式要满足以下的条件:

  1. 首先要满足第二范式
  2. 非主属性之间不存在函数依赖

由于满足了第二范式,表示每个非主属性都函数依赖于主键。如果非主属性之间存在了函数依赖,那么非主属性与主属性之间就存在传递依赖,这样就不满足第三范式考试要考

举例:

从上表中可以看出,非主属性单位号单位名存在依赖关系,那么,单位名称读者号就存在传递依赖。故不符合3NF。

如果需要修改上图表满足3NF,则需拆分成如下表:

R1(读者号,姓名,单位号)
R2(单位号,单位名)
R3(图书号,书名)
R4(读者号,图书号,借阅日期,还书目期)

NC范式(BCNF)

R 为任一给定关系, XY 为其属性集, F 为其函数依赖集,若 R 为 3NF,且其 F 中所有函数依赖 X→Y(Y 不属于 X)中的 X 必包含候选关键字,则 RBCNF

简单的说,BCNF是第三范式的补充,且要满足以下的条件:

  1. 满足前面的所有低级范式要求
  2. 主码(主键)之间不存在依赖

就是要在 3NF 的基础上消除主属性对于码的部分与传递函数依赖。

举例:

该例子候选键为:(学生,老师)和(学生课程),如果上述例子,设定主属性(主键)为:学生老师两列为复合主键,那么该例子满足3NF(因为不存在传递依赖)。

总结(考试要考)

1NF: 满足原子性,字段不可再分割 字段都是单一属性
2NF: 满足完全依赖,消除部分子函数依赖(列不能混着用) 要求我们使用唯一主键
3NF: 消除非主属性传递依赖 非主属性之间不能存在函数依赖
BCNF: 消除主属性传递依赖 主码(主键)之间不存在依赖

只要是关系型数据库的表,都满足第一范式。第一范式本质更多的是对关系型数据库的一个限定。

第二、第三范式更多的是对数据库表合理设计的一个要求,理解第二、第三范式能够更好的帮助我们设计数据库表。

:本文原创由 bluetata 发布于: https://bluetata.blog.csdn.net/ 转载请务必注明出处。

[数据库原理] 理清数据库范式(1NF、2NF、3NF、BCNF)相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 数据库规范化 (1NF, 2NF, 3NF, BCNF)

    先记录几个概念 超键: 超键类似主键, 通过"超键", 我们可以一次性定位到某一条准确的数据上; 候选键: 候选, 即"主键"的候选; 超键是可以由多个属性来组 ...

  10. 1NF,2NF,3NF,BCNF范式(学习笔记)

    前言:2NF必须在1NF的前提下,3NF必须在2NF的前提下,如果前提都不满足当然不是此阶级范式 1NF 只需要满足:在数据库表中每一个属性(列)都不可以再进行拆分(记住它就行) 例如 学生姓名就不可 ...

最新文章

  1. 分享:python,限制任意函数,线程的执行时间或根据条件终止.
  2. Android获取存储卡路径的方式(转)
  3. 数字图像处理之几何变换
  4. .Net 如何模拟会话级别的信号量,对http接口调用频率进行限制(有demo)
  5. python办公自动化excel_python办公自动化:Excel操作入门
  6. 什么是Web 2.0——下一代软件的设计模式和商业模式 (全文翻译—1 博客版序)
  7. SysLink Overview
  8. 一张图读懂哔哩哔哩2019Q1财报
  9. linux 挂载windows共享目录 is not a valid block device
  10. openjdk tomcat 安装
  11. Simple QQLogin 1.3(QQ2008 或更早版本)
  12. 【MySql】Navicat Premium 15 无限试用脚本
  13. 百练2739:计算对数题解
  14. L1-030——一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。
  15. 【C语言】复数的四则运算与复数运算的头文件
  16. 什么样的企业算是负责任的企业
  17. android中的长按复制
  18. python测试理论-9-6
  19. 带你一起Piu Piu Piu~
  20. package.json文件中的main属性使用

热门文章

  1. Cannot uninstall ‘dill‘. It is a distutils installed project and thus we cannot accurately determine
  2. Multi-class Classication (多分类问题)实例--手写数字识别
  3. hdu1243反恐训练营
  4. 智能水泵控制器,如何选型?
  5. 用Python数据分析来辅助汽车选购决策(雷凌vs卡罗拉)(持续更新ing)
  6. 魔塔之拯救白娘子~我的第一个VB6+DX8做的小游戏源码~22开始游戏-穿越楼层
  7. Canon EOS350D/EOS300D/EOS20D规格比较
  8. Framework 重装
  9. 【STC15】P1.3做ADC-使用外部TL431基准计算外部电压
  10. java查询学生信息_JAVA学生信息管理系统