banner
veritas

veritas

github

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

题外话#

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

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

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

相关概念及案例解析#

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

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

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

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

总结#

范式

作用

特点

1NF:

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

字段都是单一属性

2NF:

满足完全依赖,消除部分子函数依赖(列不能混着用)

要求我们使用唯一主键

3NF:

消除非主属性传递依赖

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

BCNF:

消除主属性传递依赖

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

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

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

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.