1nf,2nf,3nf

范式的归纳整理(1NF2NF3NF、BCNF 第一范式(1NF) 标准的表 第二范式(2NF) 部分函数依赖 第三范式(3NF) 传递函数 BC范式(BCNF) 候选键相关 第四范式(4NF) 消除多值依赖 第五范式(5NF) 1NF的定义 如果关系模式R的每一个属性都是不可再分的数据项,则称关系模式R满足第一范式。 Arelation in which that intersection of each row and column contains one and only one va... 阅读详情

第一正规化(1NF,中国大陆译作第一范式,台湾译作第一正规化)是数据库正规化中所使用的一种正规形式。第一正规化是为了要排除 重复群 的出现,所采用的方法是要求数据库的每个字段都只能存放单一值,而且每笔记录都要能利用一个惟一的主键来加以识别。

目录

   [隐藏

[编辑]不符合第一正规化的情况

[编辑]重复群

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

交易
顾客 日期 数量
Pete Monday 19.00

-28.20

Pete Wednesday -84.00
Sarah Friday 100.00

150.00

-40.00

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

交易
交易 ID 顾客 日期 数量
1 Pete Monday 19.00
2 Pete Monday -28.20
3 Pete Wednesday -84.00
4 Sarah Friday 100.00
5 Sarah Friday 150.00
6 Sarah Friday -40.00

[编辑]缺乏唯一识别码

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

交易
顾客 日期 数量
Pete Monday 19.00
Pete Monday 19.00

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

交易
交易 ID 顾客 日期 数量
1 Pete Monday 19.00
2 Pete Monday 19.00

[编辑]关联式数据库里的第一正规化

大多数的 RDBMS (关联式数据库) 允许使用者在定义资料表的时候不去指定主键,不过这么一来这种资料表就不符合第一正规化了。

从某个角度看来,不允许重复群的出现是关联式数据库表示资讯的方法,RDBMS 里资料表每一笔记录的每一个字段都只能有一个值。举例来说,如果定义了一个叫做 Favorite Number 的整数字段,每一笔记录的 Favorite Number 这个字段都只会是一个整数 (或是无);这也就是说,如果设定了主键的话,理论上不可能会有任何关联式数据库的资料表会违反第一正规化的原则。

不过就算是在这种情况下,还是可以设计出在骨子里违反第一正规化的资料表。最简单的方法就是把多个有意义的值编码过后存进一个字段里,然后在资料表中用很多字段来表达同一个事实。

[编辑]单一字段中有多个有意义的值

在单一字段中存放多个值是违反第一正规化的做法,下面这个就是很好的例子,它把多个值用逗号分开来表示:

挑食列表
不喜欢的食物
Jim Liver, Goat's cheese
Alice Broccoli
Norman Pheasant, Liver, Peas

以这样的设计看来,想要知道有什么人不喜欢某样特定的东西是很不容易的。不过可以把这个资料表转化成下面这种符合第一正规化的型式:

挑食列表
不喜欢的食物
Jim Liver
Jim Goat's cheese
Alice Broccoli
Norman Pheasant
Norman Liver
Norman Peas

[编辑]用很多字段来表达同一个事实

在同一个资料表里用多个字段来表达同一个事情也是违反第一正规化的:

个人资料
喜欢的颜色 不喜欢的食物 (1) 不喜欢的食物 (2) 不喜欢的食物 (3)
Jim Green Liver Goat's cheese  
Alice Fuchsia Broccoli    
Norman Blue Pheasant Liver Peas
Emily Yellow      

就算我们能确定每个人不喜欢吃的食物最多不会超过三样,这还是一个很糟的设计。举例来说,我们想要知道所有不喜欢同一种食物的人的组合的话,这就不是件容易的事,因为食物有可能出现在任何一个字段,也就是说每一次的查询都要去检查 9 (3 x 3) 组不同的字段组合。


第二正规化(2NF,台湾译作第二正规化)是数据库正规化中所使用的一种正规形式。它的规则是要求资料表里的所有资料都要和该资料表的主键有完全相依关系;如果有哪些资料只和主键的一部份有关的话,就得把它们独立出来变成另一个资料表。如果一个资料表的主键只有单一一个字段的话,它就一定符合第二正规化。

一个资料表符合第二正规化当且仅当

[编辑]范例

有一个资料表记录了设备元件的资讯,如下所示:

元件来源
元件 ID (主键) 供应商 ID (主键) 供应商名称 价格 供应商住址
65 2 Stylized Parts 59.99 VA
73 2 Stylized Parts 20.00 VA
65 1 ACME Industries 69.99 CA

这个资料表的每个值都是单一值,所以它符合第一正规化。因为同一个元件有可能由不同的供应商提供,所以得把元件 ID 和供应商 ID 合在一起组成一个主键。

主键和价格之间的关系很正确:同一个元件在不同供应商有可能会有不同的报价,所以价格确实和主键完全相关(完全依赖)。

另一方面,供应商的名称和住址就只和供应商 ID 有关(部分依赖),这不符合第二正规化的原则。仔细看就会发现 "Stylized Parts" 这个名称和 "VA" 这个住址重复出现了两次;要是它改名了或是被其他公司并购了怎么办?这时候最好把这些资料存到第二个资料表中:

供应商
供应商 ID (主键) 名称 住址
1 ACME Industries CA
2 Stylized Parts VA

这么一来,原本的 "元件来源" 资料表就得要做相对应的更动:

元件来源
元件 ID (主键) 供应商 ID (主键) 价格
65 2 59.99
73 2 20.00
65 1 69.99

检查资料表里的每个字段,确认它们是不是都和主键完全相关,这样才能知道这个资料表是不是符合第二正规化;如果不是的话,就把那些不完全相关的字段移到独立的资料表里。接下来的步骤是要确保所有不是键的字段都和彼此没有相依关系,这就叫做第三正规化

第三正规化(3NF,中国大陆译作第三范式,台湾译作第三正规化)是数据库正规化中所使用的一种正规形式,用来检验是否所有非键属性都只和候选键有相关性,也就是说所有非键属性互相之间应该是无关的。

第三正规化和第二正规化不同的地方在于,在第三正规化里,所有的非键属性都必须和每个候选键有直接相关。如果再对第三正规化做进一步加强就成了BC正规化,它所强调的重点就在于 "资料间的关系是奠基在键上、以整个键为考量、而且除了键之外不考虑其他因素"。

目录

   [隐藏

[编辑]正规定义

令:

  • {R} 表一个关系;
  • F 表维持 R 所需的一组功能相依性
  • X 表 R 属性的子集合
  • A 表 R 的一个属性

如果对于 X \to A 这种型式的功能相依性而言,下列叙述任一为真的话,则可以称 R 符合第三正规化:

任何一个具有部份相依性或是转移相依性的关系都违反了第三正规化。

[编辑]范例

以下面这个定义机械元件的关系为例:

机械元件
元件编号
(主键)
制造商名称 制造商地址
1000 Toyota Park Avenue
1001 Mitsubishi Lincoln Street
1002 Toyota Park Avenue

本例中制造商地址很明显地不该被列在这个关系里面,因为和元件本身比起来,制造商地址应该和制造商比较有关系;正确的做法应该是把独立成为一个新的资料表:

制造商
制造商名称
(主键)
制造商地址
Toyota Park Avenue
Mitsubishi Lincoln Street

然后把原本的资料表改成这样:

机械元件
元件编号
(主键)
制造商名称
1000 Toyota
1001 Mitsubishi
1002 Toyota

先前那个资料表的问题在于每提到一次制造商名称就要多存一次它的地址,而这就不符合第三正规化的原则。

下面提供了另一个例子:

订单 (Order)
订单编号 (Order Number)
(主键)
客户名称 (Customer Name) 单价 (Unit Price) 数量 (Quantity) 小计 (Total)
1000 David $35.00 3 $105.00
1001 Jim $25.00 2 $50.00
1002 Bob $25.00 3 $75.00

在本例中,非主键字段完全依赖于主键订单编号,也就是说唯一的订单编号能导出唯一非主键字段值,符合第二正规化。第三正规化要求非主键字段之间不能有依赖关系,显然本例中小计依赖于非主键字段单价和数量,不符合第三正规化。小计不应该放在这个资料表里面,只要把单价乘上数量就可以得到小计了;如果想要符合第三正规化的话,就把小计拿掉吧 (不过在做查询的时候,本来用 "SELECT Orders.Total FROM Order" 就要改成用 "SELECT UnitPrice * Quantity FROM Order" 了)。

订单 (Order)
订单编号 (Order Number)
(主键)
客户名称 (Customer Name) 单价 (Unit Price) 数量 (Quantity)
1000 David $35.00 3
1001 Jim $25.00 2
1002 Bob $25.00 3

数据库范式简单讲解(1NF2NF3NF、4NF、BCNF)     近期在学习数据库范式,这很是让博主纠结了一阵呢,所以简单总结一下,奉上一点案例分析,与您分享~   一、概念        R-关系模式      r-关系      U-属性集      FD-函数依赖      X→Y:"X函数决定Y","Y函数依赖于X"。      A⊆B   A包含于B,A小,B大,B→A        元组:二维表中的行      属性:... 阅读详情

相关推荐

数据库基础】正则化(Normalization)P1:UNF1NF2NF3NF

范式(Normal Form):一、无范式(Unnormalized Form,UNF)二、第一范式(First Normal Form,1NF)三、第二范式(2NF)函数依赖(Functional Dependency)完全函数依赖(full functional dependency)部分函数依赖(partial dependency)四、第三范式(3NF)传递性依赖(transitive dependency)。 写下此文,希望能深入浅出地总结【正则化】的要点.....................

YFY20020109的博客 5560

数据库-----范式

数据库范式,

一个后端菜鸟的博客 2579

FPGA实现DDR接口

verilog// DDR2控制器状态机// 初始化序列// 发出初始化命令endendendend// 自动预充电end// 其他状态...endcaseendend。

whm128的博客 931

数据库范式详细介绍(1NF,2NF,3NF,BCNF,4NF)

一、基本介绍 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。 目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。 范式的

qq_34246965的博客 3万+

数据库】详细讲解三大范式1NF2NF3NF

(在数据库设计中,只能有一个主键,但可以由多个列组成(复合主键)。唯一标识数据库表中每个记录的一列或一组列。在表中必须是唯一的,每个记录都应该有一个不同的主键值。列不允许包含空值(NULL),因为它们用于唯一标识记录。用于建立表之间的关系,例如,用于创建外键关联。表中具有唯一性要求的列或列组合。值也必须是唯一的,就像主键一样。不同于主键,候选键可以包含空值,但其中至少有一个候选键值不能为 NULL。在一个表中,可以有多个候选键,从多个候选键中选择一个作为主键。

码农研究僧的博客 1万+

[ 数据库原理 ] 数据库范式概念:1NF2NF3NF、BCNF详解及其应用总结

1NF:满足原子性,字段不可再分割字段都是单一属性2NF:满足完全依赖,消除部分子函数依赖(列不能混着用)要求我们使用唯一主键3NF:消除非主属性传递依赖非主属性之间不能存在函数依赖BCNF:消除主属性传递依赖主码(主键)之间不存在依赖只要是关系型数据库的表,都满足第一范式。第一范式本质更多的是对关系型数据库的一个限定。第二、第三范式更多的是对数据库表合理设计的一个要求,理解第二、第三范式能够更好的帮助我们设计数据库表。[ 本文作者 ] bluetata。

我在山城重庆,我希望能为这片软件沙漠地带贡献自己的一滴水,Stay tuned! 1万+

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

数据库入门(一)最简单的范式理解引言范式种类第一范式(1NF)符合1NF的关系中的每个属性都不可再分存在问题Cohen-Sutherland代码裁剪算法基本思想Cohen-Sutherland操作步骤中点分割裁剪算法(对分法)基本思想线段和窗口有交点情况Liang-Barsky算法Liang的初发现如何判断入边出边?如何判断uuu值?Liang-Barsky算法特点超链接 引言 Normal Fo...

一拳Marx 2万+

范式通俗理解:1NF2NF3NF和BNCF

范式通俗理解:1NF2NF3NF和BNCF准备知识超键、候选键、主键函数依赖部分依赖传递依赖范式1NF2NF3NFBCNF参考 准备知识 超键、候选键、主键 超键 超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键 候选键 候选键(candidate key):不含有多余属性的超键称为候选键。也就是关系中的一个属性组,其值能唯一标识一个元组。若从属性组中去掉任...

Yesterday You Said Tomorrow. 14万+

数据库1NF2NF3NF的判别

数据库1NF2NF3NF的判别 标签: 数据库 范式 首先知道两个依赖: 1、完全依赖 比如(x,y)->z并且x或者y都不能单独得到z,则z是对(x,y)的完全依赖。 2、部分依赖 比如(x,y)->z,但是x->z,则z是对(x,y)的部分依赖。 3、传递依赖 比如x->y y->z则z是对x的传递依赖(x可能也是一个组合比如(x1,x2)->y y...

CoderWangSon 2万+

简单说明1NF,2NF,3NF

为了符合第三范式,应该将这个表拆分为三个表,一个用于存储学生的基本信息(包括学生ID和姓名),一个用于存储学生的成绩信息(包括学生ID和各个科目的成绩),另一个用于存储班级信息(包括班级ID、班级名称和班主任)。为了符合第二范式,应该将这个表拆分为两个表,一个用于存储学生的基本信息(包括学生ID和姓名),另一个用于存储学生的成绩信息(包括学生ID和各个科目的成绩)。在这个例子中,“学生的姓名和年龄”是一个可以进一步分解的数据项,它包含了两个原子数据项:“学生的姓名”和“学生的年龄”。

csdnfsf的博客 2133

1NF | 2NF | 3NF的区分以及什么是函数依赖、部分函数依赖、值传递依赖(最详细的讲解1NF2NF3NF的关系)

1NF | 2NF | 3NF的区分 符合3NF一定符合2NF、一定符合1IF 简单区分。2NF不存在部分函数依赖,3NF不存在传递函数依赖 第一范式1NF 符合1NF的关系中的每个属性都不可再分。 第二范式2NF 消除了1NF非主属性对主属性的部分函数依赖。 函数依赖:在属性(属性组)X的值确定的情况下,必定能够确定属性Y的值。 例如:学号–>班主任。(学号,课程名称)–>分数。 完全函数依赖:在一张表中,如果X–>Y,对于X的任意子集都不能确定Y。 例如(学号,课程)–

日常笔记 | 干货分享 | 毕设源码 | 毕设指导 | 答辩指导 1万+

1NF2NF3NF、BCNF精讲

本文笔者总结了1NF2NF3NF、BCNF的概念、关系以及判别方式,尽可能帮助读者以比较轻松的方式了解这四种范式。

wyr1849089774的博客 2279

范式判断的三个步骤以及各个范式标准(1NF,2NF,3NF,BCNF,4NF)

范式判断的三个步骤 假设我们有关系模式R(A,B,C),函数依赖F={AB->C} 1.检查R中元素的闭包,也就是哪些元素或者元素组合可以根据F中函数依赖关系得到完整的R,这些元素或者元素组合就是候选码。这里AB的闭包是ABC,记作(AB)+=ABC,所以AB是候选码。 2.通过候选码确定主属性和非主属性。这里A,B是主属性,剩下的C就是非主属性。 3.判断范式标准:1NF2NF3NF,BCNF,4NF 各个范式定义 1NF:属性不可分割。 例如 关系模式:学生(姓名,住址),而住址又包含(区,

qq_40177015的博客 2万+

非常详细的范式讲解(1NF/2NF/3NF/BCNF

范式 ​ 范式在计算机方面运用广泛,在计算机二级三级均有涉及到,今天就来讲讲范式。要是能够认真的看完,相信一定能够理解的。 ​ 在讲范式之前,我们先来了解有关范式的基本概念,听懂了有利于后面的学习。 函数依赖 ​ 首先一个好的关系模式是不会出现以下问题的: 1. 插入异常 2. 删除异常 3. 更新异常 4. 数据冗余尽量少 如果出现那是由于数据依赖,其中数据依赖分为:函数依赖,多值依赖,连接依赖等等。 所以,当关系模式出现问题,解决方法为——规范化理论(找到关系模式中不适合的数据依赖,并消除它们)

Panda4u的博客 7537

一文读懂1范式(1NF)、2范式(2NF)、3范式(3NF)

一文读懂1范式(1NF)、2范式(2NF)、3范式(3NF) 范式的基本概念 范式可以理解为是一种模式或规范,在我们设计关系型数据库的时候,常常会用到,要求表满足这种规范。 三种范式之间的关系:在 1NF 的基础上增加一些条件,达到2NF要求,在2NF基础上满足一些要求,到达3NF要求,及三种范式之间有一种包含关系,1NF 包含于 2NF2NF包含于3NF。当然范式不止这三种,还有BCNF、4N...

WritingPoems的博客 1万+

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

转自https://www.jianshu.com/p/94a274ef35a9 一. 关于数据冗余与异常 数据库的规范化 数据库规范化是一种在数据库中组织数据的技术。 规范化是消除冗余(重复)和不良特性(如插入异常,更新异常和删除异常)的方法。 这是一个多步骤的过程,将数据放入表中,再从关系表中删除重复的数据。 规范化主要用于两个目的: 消除冗余(无用)数据。 确保数据依赖性是有意义的...

Soilerest的博客 1万+

1NF2NF3NF,BCNF

用最直白最人类的话来解释1NF2NF3NF,BCNF. 第一范式: 第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式1NF中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。(摘自百度百科) 解释:1NF是指数据库每一列都是不能再拆分的,比如说表示性别,姓名等,而学生成绩则是..

hen2315的博客 1644

数据库 1NF2NF3NF、BCNF

1NF 第一范式是指列的原子性,列不可再分。 例如下图就不符合第一范式 说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库2NF 第二范式是指在1NF基础上,消除部分函数依赖。看定义可能不好理解,看看下面例子,再回来理解一下。 假定选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),关键字为组合关键字(学号, 课程名称),因为存在如下决定关系: (学号, 课程名称) → (姓名, 年龄, 成绩,

阳光大男孩!!!的博客 6001

外行人都能看懂的技术文章系列——数据库范式1NF,2NF,3NF,BCNF,4NF,5NF,6NF举例详解

数据库范式1NF,2NF,3NF,BCNF,4NF,5NF,6NF举例详解 目录 1. 致读者 2. 基本概念(作者自己的定义) 3. 本文范例场景 4. 正文 第一范式(1NF) 第二范式(2NF第三范式(3NF) BC范式(BCNF) 第四范式(4NF) 第五范式(5NF) 第六范式(6NF) 总结 补充说明 1. 致读者 此文章是作者首次写作的技术文章,内容都是自己的理解,其中一定有不少错误,如果您有不赞同或者不理解的地方,恳请您提出宝贵意见! 2. 基本概念(作

qq_43413500的博客 6304

AMBA-CHI协议详解(五)

 每个事务由许多不同的packets组成,这些数据包通过互连(interconnect)传输。packets内的一组ID域段用于提供有关包的附加信息。

Crazzy_M的博客 1926

全国297个地级市市辖区数据2021-1990保险业承保额 城镇职工基本养老保险参保人数 城镇基本医疗保险 失业保险参保人数

除了本数据文件名上列出的指标外,本数据还包含年末户籍人口、地区生产总值(GDP)常用指标,便于相关指标与人口、经济总量的分析比较数据范围:全国297个地级市城市的市辖区数据,含四个直辖市,去掉了已撤销地级市城市的巢湖、莱芜、青海的海南数据年度:1990-202132个年度的数据,城市的市辖区口径(其中城市的GDP、户籍人口、常住人口是全市口径)的统计指标数据excel数据文件包原始数据(由于多年度指标不同存在缺失值)、线性插值、ARIMA填补三个版本,提供您参考使用。其中,ARIMA填补无缺失值。填补说明: 线性插值。利用数据的线性趋势,对各年份中间的缺失部分进行填充,得到线性插值版数据,这也是学者最常用的插值方式。 ARIMA填补。基于ARIMA模型,利用同一地区的时间序列数据,对缺失值进行预测填补。主要指标:年份省份行政区划码 省份名称地级市行政区划代码地级市地区生产总值(万元)户籍人口(万人) 本数据文件名上列出的指标数据无缺失值

上一篇: 数据挖掘主要解决的四类问题
下一篇: hibernate中的简单应用
yufaw
博客等级 码龄19年 49粉丝 18原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值