oracle 第一范式,数据库范式之第一范式

oracle 第一范式,数据库范式之第一范式数据库范式(DatabaseNormalization)设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,还又称完美范式)。首先要明白”范式(NF)”…

大家好,又见面了,我是你们的朋友全栈君。

数据库范式(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。

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

通常上只要知道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是很简单,它是所有关系型数据库设计必须要满足的基础。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142322.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Jetson TX1 安装 ROS[通俗易懂]

    Jetson TX1 安装 ROS[通俗易懂]JetsonTX1安装ROS注意目前ROS只能支持32位的TX1,后面购买的TX1一般都预装64位Ubuntu。因此如果需要安装ROS需要重新刷TX1系统,否则只能等什么时候ROS官方更新了。目前请不用尝试在64位系统安装ROS,经过1周的折腾,尚未找到可行的方案。一、重新刷TX1系统1.在主机上设置由于TX1只提供了一个USB3.0接口,使用USB3.0HUB进行拓展USB。插好键盘鼠

    2022年6月16日
    49
  • 【tensorflow】浅谈什么是张量tensor

    【tensorflow】浅谈什么是张量tensor也许你已经下载了TensorFlow,而且准备开始着手研究深度学习。但是你会疑惑:TensorFlow里面的Tensor,也就是“张量”,到底是个什么鬼?也许你查阅了维基百科,而且现在变得更加困惑。也许你在NASA教程中看到它,仍然不知道它在说些什么?问题在于大多数讲述张量的指南,都假设你已经掌握他们描述数学的所有术语。别担心!我像小孩子一样讨厌数学,所以如果我能明白,你也可以!…

    2022年6月25日
    25
  • Windows server 2003 ××× 配置

    Windows server 2003 ××× 配置

    2021年8月1日
    49
  • windows dumpbin工具[通俗易懂]

    windows dumpbin工具[通俗易懂]一般情况下,我们需要查看一个DLL或EXE中的包含的函数或是依赖的函数之类的信息,可以使用VS自带的工具dumpbin;  可以直接在命令行下输入dumpbin就可以查看他的使用说明,如果未显示,可以先运行VS安装目录下的vcvarsall.bat来设置一下环境变量就可以了 [cpp] viewplaincopyMicro

    2022年6月19日
    67
  • Java 上传文件到ftp服务器「建议收藏」

    Java 上传文件到ftp服务器「建议收藏」前两篇文章我们搭建了一个ftp服务器,并对服务器进行了相应的配置,这篇文章我们来说一下我们如何上传文件。        先介绍一下项目,本项目采用的是springmvc+spring+mybatis,用maven进行项目管理。看一下项目结构。         如果单独做测试的话不用这么费劲,写一个简单的测试类就ok了!而在这个项目中,parent是所有项

    2022年9月5日
    3
  • 光敏传感器arduino实验_光敏传感器实验报告

    光敏传感器arduino实验_光敏传感器实验报告使用STM32的HAL库,配置多通道ADC,用DMA采集,算数平均值滤波,把GL5528光敏电阻得到的数据,转为光照度Lux,其中有Matlab计算公式与函数拟合,数据处理。

    2025年7月17日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号