数据库第一、第二、第三范式整理

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

第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。

但字段是否是不可分的原子,需要根据系统的实际需求来判断。

例如:数据库系统中需要用到“地址”这个属性,则直接将地址设置为一个字段,它就是不可分的原子值。但如果系统中需要省份、城市等信息,那地址就不是原子性的,它可以再细分。地址细分成省份、城市后,它才满足第一范式。

上述图就遵循了第一范式的要求,每一个属性根据系统需求都不可再分,都是原子性。做筛选的时候提高了数据库的性能。

2.第二范式(确保表中的每列都和主键有关--直接或间接有关)

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

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

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

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

第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解; 
通俗的理解是,字段还可以再分吗?如过不能,则是符合1NF的设计。

第二范式:2NF是对记录的唯一性约束,要求记录有唯一标识,即实体的唯一性;

第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。 

总结:

第一范式:简单说 列不能再分

第二范式:简单说 建立在第一范式基础上,消除部分依赖

第三范式:简单说 建立在第二范式基础上,消除传递依赖。

1NF: 原子性,属性不能再分

2NF:不存在部分函数依赖,如(A, B, C, D),(A,B)为候选键,不能由候选关键字的一部分决定非关键字,如B->C

3NF:不存在传递函数依赖,如A->B->C

BCNF:进一步消除主属性的传递依赖(A, B, C, D), 候选键有(A,B)和(B,C),所以主属性为A,B,C,不存在(A,B)->C, C->A这种(如果候选键只有一个属性则BCNF=3NF)

 

学习链接:https://blog.csdn.net/u013190088/article/details/78017465

https://blog.csdn.net/u013164931/article/details/79692402

 

你可能感兴趣的:(数据库)