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:

消除主属性传递依赖

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

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

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

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。