数据库 第一、二、三范式

简短不割

1NF:字段不可分;
2NF:有主键,非主键字段依赖主键;
3NF:非主键字段不能相互依赖;

解释:
1NF:原子性 字段不可再分,否则就不是关系数据库;
2NF:唯一性 一个表只说明一个事物;
3NF:每列都与主键有直接关系,不存在传递依赖;

第一范式(确保每列保持原子性)

第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第一范式,如下表所示。

第二范式(确保表中的每列都和主键相关)

第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

比如要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键,如下表所示。

这样就产生一个问题:这个表中是以订单编号和商品编号作为联合主键。这样在该表中商品名称、单位、商品价格等信息不与该表的主键相关,而仅仅是与商品编号相关。所以在这里违反了第二范式的设计原则。

而如果把这个订单信息表进行拆分,把商品信息分离到另一个表中,把订单项目表也分离到另一个表中,就非常完美了。如下所示。

第三范式(确保每列都和主键列直接相关,而不是间接相关)

第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关于客户其它信息(比如姓名、所属公司等)的字段。如下面这两个表所示的设计就是一个满足第三范式的数据库表。

这样在查询订单信息的时候,就可以使用客户编号来引用客户信息表中的记录,也不必在订单信息表中多次输入客户信息的内容,减小了数据冗余。

我是天王盖地虎的分割线

参考:http://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html

时间: 2024-08-05 03:38:58

数据库 第一、二、三范式的相关文章

数据库表设计三范式

数据库设计三范式(nomorlization) 1NF:原子性,即每个字段都不可以在分割了. 2NF:唯一性,即每个表只描述一个实体,这个实体要有主键,非主关键字要完全依赖主键,正因为说是完全依赖,是因为在组合主键存在的情况下,非主关键字不能只依赖部分关键字. 3NF:一个表中不能包含其他表中已经存在的非主键字段信息,也就是说只可以包含其他表的主键信息,这样就是主外键,通过主外键就可以进行表之间的连接(join),3NF主要是减少数据冗余. 数据库表设计三范式,布布扣,bubuko.com

数据库设计的三范式(六范式)

数据库是设计范式理解:关系型数据库的核心"规范化",规范化的存在是为了在数据库组织保存数据时使数据 保持完整性并且最小化的冗余数据. 数据库设计有六种范式规则,但通常我们再设计数据库时,通常用到3种范式. 1.1  第一范式: 概念:指数据库表的每一列的数据不可拆分,同一列不能有多个值,并且不能有重复的属性(列) 第一范式是所有范式的基础,不满足的数据库就不能称为关系行数据库 1:如图 简单来说第一范式没有重复的列,列中不包含多值 1.2 第二范式 概念: 在表满足第一范式的设计在数据

数据库设计的三范式

目前,主要有六种范式:第一范式.第二范式.第三范式.BC范式.第四范式和第五范式. 今天我们暂时只了解基本的三范式. 第一范式(1NF)定义:如果关系模式R的每个关系r的属性都是不可分的数据项,那么就称R是第一范式的模式. (也就是针对的是表中的字段要有唯一不可分割性) 例如(学生信息表):学生编号 姓名 性别 联系方式20080901 张三 男 email:[email protected],phone:8888666620080902 李四 女 email:[email protected]

数据库 三范式

说到软件开发 就不能不说数据库 说到数据库 就不能不说三范式 其实数据库范式一共有六个 除了第一 二 三范式以 外还有第四 第五范式和一个BC范式  在此我们只讨论三范式 有兴趣的朋友可以自己找一些专业的书籍进一步学习 第一范式(1NF) 第一范式是指数据库表的每一列都是不可分割的基本数据项 同一列中不能有多个值 即实体中的某个属性不能有多个 值或者不能有重复的属性  这就是第一范式的基本概念 什么意思呢 举个例子吧 在一个表里有一个"电话"字段 其值既有手机号 又有座机号 那么 这样

数据库设计二《函数依赖和三范式》

函数依赖: 定义:R(U)是在属性集U上的关系模式,X,Y是U的子集.若对于R(U)的任意一个可能关系r,r中的不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y,或者Y函数依赖X,记作X--->Y. 单纯的概念有点难以理解,通过例子1:属性集U,关系模式R(U),子集X,Y,可能关系r1. 可以理解为X能唯一确定Y,则X--->Y.常用为主键------>其他属性 函数依赖和三范式 函数依赖的分类:完全依赖,部分依赖,传递依赖. 完全依赖和一范式 完全依赖:X

第三十二章——数据库打包和三大范式

package程序包和程序体 package---包头 package body---包体 dbms_output.put_line(); 上面的输出语句就是一个程序包加存储过程 dbms_output是包的名字, 调用里面的某个方法 包头的语法: create or replace package 包头名 as 变量的说明... 存储过程或者函数的声明(不需要写实现的代码块) end; 声明了一个包头, 就要有一个包体与之对应, 去实现包头中写明的存储过程或者函数 包体的语法: create

数据库三范式的简单理解

数据库范式 范式的级别 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小. 目前关系数据库有六种范式:第一范式(1NF).第二范式(2NF).第三范式(3NF).巴斯-科德范式(BCNF).第四范式(4NF)和第五范式(5NF,又称完美范式). 范式越高,冗余最低,一般到三范式,再往上,表越多,可能导致查询效率下降.所以有时为了提高运行效率,可以让数据冗余(反三范式,一般某个数据经常被访问时,比如数据

数据库设计——三范式概念+实战

在利用三范式设计数据库的时候,以前总以为是先画完ER图,然后导出关系模式,最后用三范式去检验数据库设计的是否合理,but not!我们在一开始画ER图的时候,就应当和三范式联系起来,将错误消灭在源头.为了能最早的检验出错误,我们就要对ER图转换成关系模式的算法和三范式是如何消除冗余,避免冲突有深刻的了解,才能知道如何最早发现错误. 本文主要以机房收费系统数据库设计中的一些东西为例,结合三范式概念,简述下三范式. 一,1NF 定义: 如果关系模式R的每个关系r的属性值都是不可分的原子值,那么称R是

mysql数据库的三范式的设计与理解

一般的数据库设计都需要满足三范式,这是最基本的要求的,最高达到6NF,但是一般情况下3NF达到了就可以 一:1NF一范式的理解: 1NF是关系型数据库中的最基本要求,就是要求记录的属性是原子性,不可分,就是属性不能分,这是关系型数据库的基本要求,不满足这个就不能叫关系型数据库了 例如: 讲师 性别 班级 教室 代课时间 代课时间(开始,结束)韩忠康 Male php0331 102 30天 2013-03-31,2013-05-05韩忠康 Male php0228 106 30天 2013-02

2019-3-1 09:05:16数据库建立的三种范式及冗余字段

第一范式(1NF)无重复的列 所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性.如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系.在第一范式(1NF)中表的每一行只包含一个实例的信息.简而言之,第一范式就是无重复的列. 1NF的定义为:符合1NF的关系中的每个属性都不可再分 下表所示情况,便不符合1NF的要求: 说明:在任何一个关系数据库中,第一范式