数据库的三大范式
第一范式(1NF):指的是数据库表中的任何属性都具有原子性,不可再分解;
第二范式(2NF):指的是对记录的唯一性约束,要求记录要有唯一标识,即实体的唯一性;
第三范式(3NF):指的是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。
理解思路:
(一、第一范式(1NF):第一列都是不可分割的原子数据数据项);
所谓第一范式(1NF)是指在关系模型中,对于添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域。
在任何一个关系数据库中,第一范式(1NF)是对关系模式的设计基本要求,一般设计中都必须满足第一范式(1NF)。不过有些关系模型中突破了1NF的限制,这种称为非1NF的关系模型。换句话说,是否必须满足1NF的最低要求,主要依赖于所使用的关系模型。
特点:
- 属性不可分割,即每个属性都是不可分割的原子项。(实体的属性即表中的列)
(二、第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于码(在1NF基础上消除非主属性对主码的部分函数依赖);
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分。选取一个能区分每个实体的属性或属性组,作为实体的唯一标识。
第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。
特点:
- 满足第一范式;
- 第二范式需要确保数据表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言),每张表只描述一件事情;
- 消除部分依赖,要求一张表中的每一列都完全依赖于主键(针对于组合主键),也就是不会出现某一列只和部分主键相关。
五个概念:
①函数依赖:A–>B,如果通过A属性(属性组)的值,可以确定唯一B属性的值。则称B依赖于A;
例如:学号–>姓名、(学号,课程名称)–>分数;
②完全函数依赖:A–>B,如果A是一个属性组,则B属性值得确定需要依赖于A属性组中所有的属性值;
例如:(学号,课程名称)–>分数;
③部分函数依赖:A–>B,如果A是一个属性组,则B属性值得确定只需要依赖于A属性组中某一些值即可。
例如:(学号,课程名称)–>姓名;
④传递函数依赖:A–>B,B–>C,如果通过A属性(属性组)的值,可以确定唯一B属性的值,在通过B属性(属性组)的值可以确定唯一C属性的值,则称C传递函数依赖于A;
例如:学号–>系名、系名–>系主任;
⑤码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码;
例如:该表中码为(学号,课程名称)
- 主属性:码属性组中的所有属性;
- 非主属性:除过码属性组的属性;
(三、第三范式(3NF):在2NF的基础上,任何非主属性不依赖于其他非主属性(在2NF基础上消除传递依赖))。
第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。
特点:
- 前提:满足第一范式和第二范式;
- 第三范式需要确保数据表中的每一列数据表和主键直接相关,而不能间接相关;
- 消除传递依赖,要求一张表中的每一列都和主键是直接依赖的,不是间接依赖。
3NF基础上,任何主属性不能对主键子集依赖(在3NF基础上消除主属性对主码子集的依赖)。巴斯-科德范式(BCNF)是第三范式(3NF)的一个子集,即满足巴斯-科德范式(BCNF)必须满足第三范式(3NF)。通常情况下,巴斯-科德范式被认为没有新的设计规范加入,只是对第二范式与第三范式中设计规范要求更强,因而被认为是修正第三范式,也就是说,它事实上是对第三范式的修正,使数据库冗余度更小。这也是BCNF不被称为第四范式的原因。某些书上,根据范式要求的递增性将其称之为第四范式是不规范,也是更让人不容易理解的地方。而真正的第四范式,则是在设计规范中添加了对多值及依赖的要求。
数据库三大范式
我们为了减少数据库中冗余,避免操作异常,造成数据库的浪费和报错,这时我们在设计数据库时就要按照一定的规则来避免这种以上这种情况,这种规则叫做范式。范式简单来说就是设计数据库的一些规范。
1-满足这些规则的数据库,在呈现上会显得更加的简洁和结构条理清晰。
2-在插入(insert),删除(delete),更新(update)操作时不会发生异常。
3-如果不满足这些规则时,每人都有不同的显现方式会在数据库的形式上会显得乱七八糟,结构混乱,给数据库的编程人员造成很大的麻烦,可能储存了大量的冗余信息。
第一范式(1NF)
定义:数据库表中的字段都是单一属性
——字段不可再分(列唯一)
——同一个列中不能有多个值(值唯一)
这些单一属性由基本类型构成,包括:整数,实数,字符型,逻辑型,日期型和其他类型
第二范式(2NF)
定义:在满足第一范式的前提下,数据库中的每张表均有主键。
1-单字段主键
2-联合主键(由两个或者两个以上的字段共同组成的主键):不能存在联合主键中某个主键字段决定非主键字段的情况
该表不满足第二范式,因为客户和开户银行为联合主键,客户决定客户电话,开户银行决定开户行地址,违反了联合主键字段决定非主键字段,做法就是将该表拆分为客户表和银行表即可。
第三范式(3NF)
定义:在满足第二范式的前提下,数据表的主键字段不存在传递依赖关系。即:非主键字段不能决定其他的非主键字段。
该表“工号”为主键,“部门”决定“部门电话”,“部门”决定“部门主管”,则存在非主键字段决定其它的非主键字段,不符合第三范式。符合范式,做法将其拆分为员工表和部门表。
数据库设计-三范式
概念
关系型数据库设计的一种标准化过程,目的是消除冗余数据,提高数据存储的效率和数据的完整性。
关系
三大范式是一级一级依赖的,第二范式建立在第一范式上,第三范式建立在一第二范式上。
特点
第一范式(1NF):列不可再分,其特点是每一个属性必须是原子性的,且每一列都是同一类型,换言之,在一个列中,不可存在多个属性值,如订单表中,订单号只能是一个且唯一;
第二范式(2NF):主键确保行数据的唯一性,是建立在第一范式的基础上,消除部分依赖,使每个非主键的属性与主键存在完全的依赖性。
第三范式(3NF):表的非主属性不能依赖于其他表的非主属性,也就是说每一张表的都是一个类型的全描述,如商品名称属性,只能在商品表中,而不是存储在订单表中,消除传递依赖,确保非主属性只与主键直接关联,而不是通过其他属性进行关联。
总结
- 1NF消除重复,确保数据的原子性;
- 2NF强调了主键的依赖性;
- 3NF强调了数据的完整性,避免了传递依赖;
- 三范式表述了我们设计数据库的过程中的合理性及可操作性,同时要求保证数据完整性;
- 三范式不是固定的,需要结合现场业务来考虑,过度的遵从有时会降低查询性能,所以有的时候数据该冗余还得冗余。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。