如何快速确定是1NF或2NF或3NF

题外话

这类题型一般伴随着判断候选关键字的结合考法，所以本文在介绍如何区分范式时首先先介绍如何确定候选关键字

候选关键字的求法：根据依赖集，找出从未在右边出现过的属性，必然是候选键之一，以该属性为基础，根据依赖集依次扩展，看能否遍历所有属性，将无法遍历的加入候选键中。

下面我们接着讨论如何区分范式

相关概念及案例解析

1NF:强调的是列的原子性，即列不能够再分成其他的几列
例如：下图中，图书可以分解为图书号和书名，此时不属于1NF

2NF：1.要满足第一范式2.每个非主属性要完全函数依赖于候选键，或者是主键（主码）。
PS:只有在复合字段作主键时，才可能出现不满足2NF的情况
例如：
下图中可以根据前面提到的方式，判断出该关系模式的候选码为EM，而函数依赖集中存在M→L,并不是由EM直接得出，所以存在部分函数依赖不属于2NF

3NF：1.首先要满足第二范式 2.非主属性之间不存在函数依赖（或者说不存在传递依赖）。
意思就是此时主属性为A，A→B，A→D，此时不能出现B→C这种情况

BCNF：1.满足前面的所有低级范式要求 2.主码(主键)之间不存在依赖
例如：

总结

范式

作用

特点

1NF：

满足原子性，字段不可再分割

字段都是单一属性

2NF：

满足完全依赖，消除部分子函数依赖（列不能混着用）

要求我们使用唯一主键

3NF：

消除非主属性传递依赖

非主属性之间不能存在函数依赖

BCNF:

消除主属性传递依赖

主码(主键)之间不存在依赖

只要是关系型数据库的表，都满足第一范式。第一范式本质更多的是对关系型数据库的一个限定。

第二、第三范式更多的是对数据库表合理设计的一个要求，理解第二、第三范式能够更好的帮助我们设计数据库表。