Form
May 8, 2024About 2 min
Form
数据库范式有 4 种:
- 1NF(第一范式):属性不可再分。
- 2NF(第二范式):1NF 的基础之上,消除了非主属性对于码的部分函数依赖。
- 3NF(第三范式):3NF 在 2NF 的基础之上,消除了非主属性对于码的传递函数依赖
- BCNF
- 属性:对应于表中的字段
- 主属性:在一个关系中,如果一个属性是构成某一个候选关键字(候选码)的属性集中的一个属性,则称它为主属性。
1NF
属性不能再被分割,也就是这个字段只能是一个值,不能再分为多个其他的字段了。
1NF 是所有关系型数据库的最基本要求 ,也就是说关系型数据库中创建的表一定满足第一范式。
mysql表中,只要每个字段对应一个属性,那么就符合第一范式。当然,也有不符合第一范式的例子。比如某个字段是json数据(json对象不是又可以分为多个key-value么,这多个key-value就相当于切割成多个属性了,所以不符合第一范式。
所以说为什么NoSql大多不符合第一范式,因为redis或者mongodb存的基本是各种嵌套json)
2NF
在 1NF 的基础上,消除非主属性对主码的部分函数依赖(非码属性必须完全依赖于候选码)
如下图所示,展示了第一范式到第二范式的过渡。第二范式在第一范式的基础上增加了一个列,这个列称为主键,非主属性都依赖于主键。
3NF
在 2NF 基础上,消除传递依赖(任何非主属性不依赖于其它非主属性)
BCNF
在 3NF 基础上,任何主属性不能对主键子集依赖(消除主属性对主码子集的依赖)