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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Hsql函数下_sql nvl函数

    Hsql函数下_sql nvl函数Hsql函数.下(窗口函数、分析函数、增强group)参考链接:https://blog.csdn.net/scgaliguodong123_/article/details/601353851.窗口函数与分析函数应用场景:(1)用于分区排序(2)动态GroupBy(3)TopN(4)累计计算(5)层次查询1.1、窗口函数FIRST_VALUE:取分组内排序后,…

    2022年9月16日
    0
  • MySQL Workbench安装[通俗易懂]

    MySQL Workbench安装[通俗易懂]MySQL Workbench安装

    2022年4月23日
    42
  • 电商扣减库存_电商后台系统产品逻辑全解析[通俗易懂]

    电商扣减库存_电商后台系统产品逻辑全解析[通俗易懂]作者:刘志远,电商产品经理,主导过多业务的电商产品搭建、更新迭代。微信公众号:碎碎恋产品,喜欢闲侃产品设计、商业分析以及后台挖坑一、产品经理(现实的理想主义者,对产品有着无比认真的态度,同时能够适当妥协,利用有限的资源来推动产品目标的达成)日常工作:了解用户和市场(学会把用户需求转化为产品需求)、设计产品方案(评定需求优先级)、跟进开发进度、跟进用户反馈,优化迭代电子商务的几种模式:B2C(B…

    2022年10月1日
    0
  • python常用库有哪些_怎么查看python的库

    python常用库有哪些_怎么查看python的库python之Sklearn库0前言1.数据集的预处理1.0下载数据1.1数据查看1.2标签清洗1.3标签编码1.4数据集得标准化1.5构建训练集和测试集2.八大分类算法2.1K近邻(KNN)2.1.1介绍2.1.2实现2.2朴素贝叶斯算法2.2.1介绍2.2.2实现2.3决策树算法2.3.1介绍2.3.2实现2.4逻辑回归2.4.1介绍2.4.2实现2.5支持向量机算法2.5.1介绍2.5.2实现2.6集成方法–随机森林2.6.1介绍2.6.2实

    2022年10月17日
    0
  • 完美解决C#中拖动splitContainer分割线时显示虚线问题

    完美解决C#中拖动splitContainer分割线时显示虚线问题完美解决C#中拖动splitContainer分割线时显示虚线问题

    2022年7月18日
    11
  • vs 证书签名

    vs 证书签名在VS2005或VS2008安装后发现路径**VC7\Common7\Tools\Bin\下有许多小工具,我对带有Cert的文件比较感兴趣。经过研究,发现是有关证书和签名的,当然,该证书未被证书认证机构认可。下面列出这些工具和我的使用心得。1。Makecert.exe—证书创建工具2。Cert2Spc.exe—发行者证书测试工具3。Signcode.exe—文件签名工

    2022年6月10日
    29

发表回复

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

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