数据库范式(Database Normalization)

设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,还又称完美范式)。

首先要明白”范式(NF)”是什么意思。按照教材中的定义,范式是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”。很晦涩吧?实际上你可以把它粗略地理解为一张数据表的表结构所符合的某种设计标准的级别。就像家里装修买建材,最环保的是E0级,其次是E1级,还有E2级等等。数据库范式也分为1NF,2NF,3NF,BCNF,4NF,5NF。一般在我们设计关系型数据库的时候,最多考虑到BCNF就够。符合高一级范式的设计,必定符合低一级范式,例如符合2NF的关系模式,必定符合1NF。

不过在设计关系型数据库时,通常只会用到前四种范式,内容相对较少,利用闲暇之余整理一下,以便记忆。这次只是提及最简单的第一范式。

第一范式(1NF)

所谓第一范式(1NF)是指在关系模型中,对域添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域。符合1NF的关系中的每个属性都不可再分。

如下表,就不符合1NF。

实际上,1NF是所有关系型数据库的最基本要求,你在关系型数据库管理系统(RDBMS),例如SQL Server,Oracle,MySQL中创建数据表的时候,如果数据表的设计不符合这个最基本的要求,那么操作一定是不能成功的。也就是说,只要在RDBMS中已经存在的数据表,一定是符合1NF的。如果我们要在RDBMS中表现表中的数据,就得设计为下表的形式:

通常上只要知道1NF的上述特点即可。但是为了严谨,这里举出三点不符合第一范式的例子。

不符合第一范式的情况

1、重复组(单一字段中有多个有意义的值)

重复组通常会出现在会计账上,每一笔记录可能有不定个数的值。举例来说:

顾客

日期

数量Pater

Monday

19.00,-28.20

Pater

Wednesday

-84.00

Sarah

Friday

100.00,150.00

'数量' 就是所谓的重复组了,而在这种情况下这份数据就不符合第一范式。想要消除重复组的话,只要把每笔记录都转化为单一记录即可:

顾客

日期

数量Pater

Monday

19.00

Pater

Monday

-28.20

Pater

Wednesday

-84.00

Sarah

Friday

100.00

Sarah

Friday

150.00

2、缺少唯一识别码

一样是在交易这个例子中,同一天同一个人买了同样的数量,这样的交易做了两次:

顾客

日期

数量Pater

Monday

19.00

Pater

Monday

19.00

如上所示,这两笔交易可以说是一模一样,也就是说如果只靠这些数据我们没有办法分辨这两笔记录。我们之所以说它不符合第一范式,是因为上面这样的表示法欠缺一个唯一识别码,可以是一个字段,也可以是一组字段,而且可以保证在这个数据中唯一识别码不会重复出现。要将它正规化到符合第一范式的原则只需要加入一个唯一识别码即可:

交易ID

顾客

日期

数量1

Pater

Monday

19.00

2

Pater

Monday

19.00

3、用很多字段来表达同一个事实

在同一个数据表里用多个字段来表达同一个事情也是违反第一范式的:

交易ID

人物

不喜欢的食物(1)

不喜欢的食物(2)

不喜欢的食物(3)1

Pater

梨子

苹果

2

Jim

西瓜

梨子

3

Airing

西瓜

苦瓜

梨子

4

Tom

老鼠

葡萄

懂得数据库基础的人一看就知道这是一个很糟糕的设计,甚至连觉得其都称不上是一个数据表。没错,其实1NF是很简单,它是所有关系型数据库设计必须要满足的基础。

oracle 第一范式,数据库范式之第一范式相关推荐

  1. 【Oracle】数据库范式

    为了规范化关系型数据模型,关系型数据库系统在设计时必须遵循一定的规则,这种规则称为关系型数据库系统范式.范式的主要目的是降低数据冗余,设计结构合理的数据库. 1. 第一范式(1NF):字段必须具有唯一 ...

  2. [数据库原理] 理清数据库范式(1NF、2NF、3NF、BCNF)

    文章目录 数据库范式概念 第一范式(1NF) 第二范式(2NF) 不满足第2范式可能出现的问题 第三范式(3NF) NC范式(BCNF) 总结(考试要考) 数据库范式概念 数据库范式:Normal f ...

  3. 从第一范式到第二范式所做的操作是_给女同事讲解MySQL数据库范式与反范式,她直夸我“技术好”

    1 第一范式 该范式是为了排除 重复组 的出现,因此要求数据库的每个列的值域都由原子值组成:每个字段的值都只能是单一值.1971年埃德加·科德提出了第一范式.即表中所有字段都是不可再分的. 1.1 实 ...

  4. 从第一范式(2nf)到第二范式(3nf)_啥是数据库范式

    前言: 关于数据库范式,时常有听说过,一直没有详细去了解.一般数据库书籍或数据库课程会介绍范式相关内容,范式也经常出现在数据库考试题目中.不清楚你是否对范式有比较清晰的了解呢?本篇文章我们一起来学习下 ...

  5. 数据库范式4nf什么意思_什么是第一范式(1NF)?

    数据库范式4nf什么意思 In this tutorial we will learn about the 1st(First) Normal Form which is more like the ...

  6. 什么是范式?第一范式、第二范式、第三范式的区别?

    参考链接: https://www.zhihu.com/question/24696366 总结: 范式的含义: 符合某种级别的关系模式的集合.表示一个关系内部的各属性之间联系的合理化程度.可以理解为 ...

  7. 数据库设计之第一范式、第二范式、第三范式

    一.第一范式 理论: 1.第一范式的目标是确保每列的原子性. 2.如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF:First Normal Form). 举例说明: ...

  8. 什么是数据库范式(NF)?从一范式到五范式分别是什么?

    什么是数据库范式(NF)?从一范式到五范式分别是什么? 什么是数据库范式(NF)? 为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某 ...

  9. mysql范式与反范式_给女同事讲解MySQL数据库范式与反范式,她直夸我“技术好”...

    1 第一范式 该范式是为了排除 重复组 的出现,因此要求数据库的每个列的值域都由原子值组成:每个字段的值都只能是单一值.1971年埃德加·科德提出了第一范式.即表中所有字段都是不可再分的. 1.1 实 ...

最新文章

  1. 中国人情世故的63个定律 。
  2. poj 1064 Cable master
  3. XX(北京)科技股份公司为啥需要购置服务器?
  4. CNN(Convolutional Neural Network) 的基础
  5. MySQL的初识(python开发者的第一印象)
  6. 双协议栈服务器,10. 搭建双协议栈Web服务器:使用IPv6地址、IPv4
  7. 滴滴为什么接不到长途单?
  8. 链表(创建,插入,删除和打印输出
  9. Civil 3D CustomDraw .NET混合项目设置
  10. windox与ubuntu18.04安装clion及导入qt库
  11. 基于React和SpringBoot做一个记事本
  12. 金蝶K3-航天信息税控发票开票软件接口程序
  13. 排名 教材 数字电子技术_数字电子技术教材改革及实践
  14. 辐射光电流测试软件,资深工程师告诉你如何使用示波器测试EMI辐射干扰
  15. 科研人必备图像处理软件—ImageJ
  16. 高校间计算机专业交流研讨会,第七届全国高校计算机网络教学暨网络工程专业建设研讨会...
  17. Nvidia Agx Xavier平台MIPI CSI-DHPY驱动调试
  18. SitePoint播客#70:青年,企业和播客
  19. java实现端口映射_Java BIO实现TCP端口转发(端口映射)功能源码
  20. IT行业招聘技巧--JD分析篇

热门文章

  1. 【转】iOS弹幕库OCBarrage-如何hold住每秒5000条巨量弹幕
  2. oracle 主键 唯一性,oracle 唯一索引,唯一约束,主键之间的联系
  3. 计算机视觉项目-人脸识别与检测
  4. Delphi2010 MD5加密的方法
  5. 一个11层的CNN(基于无人售货机的货物识别
  6. Python与Pycharm安装包
  7. 2019年3月16日山东省事业单位统考考题及解析(综合类)
  8. 2020 A survey on HAR Based on Temporal Signals of Portable Inertial Sensors
  9. Servlet连接SQLite数据库出现Out of Memory
  10. 长沙尚学堂python培训学校