关系数据库六种范式:
第一范式(1NF)、
第二范式(2NF)、
第三范式(3NF)、
巴斯-科德范式(BCNF)、
第四范式(4NF)
和第五范式(5NF,又称完美范式)
1NF的定义为:符合1NF的关系中的每个属性都不可再分,1NF是所有关系型数据库的最基本要求。简而言之,第一范式就是无重复的域。
但是仅仅符合1NF的设计,仍然会存在数据冗余过大,插入异常,删除异常,修改异常的问题。
2NF 在 1NF的基础之上,消除了非主属性对于码的部分函数依赖
- 函数依赖:若字一张表中,在属性(或属性组)X的值确定的情况下,必定能确定属性Y的值,那么就可以说Y函数依赖于X,写作 X—>Y
1、完全函数依赖 在一张表中,若 X → Y,且对于 X 的任何一个真子集(假如属性组 X 包含超过一个属性的 话),X ' → Y 不成立,那么我们称 Y 对于 X 完全函数依赖,记作 X F→ Y。
2、部分函数依赖 假如 Y 函数依赖于 X,但同时 Y 并不完全函数依赖于 X,那么我们就称 Y 部分函数依赖于 X,记作 X P→ Y
3、传递函数依赖 假如 Z 函数依赖于 Y,且 Y 函数依赖于 X (『Y 不包含于 X,且 X 不函数依赖于 Y』这个 前提),那么我们就称 Z 传递函数依赖于 X ,记作 X T→ Z
- 码:设K为某表中的一个属性或属性组,若除K之外的所有属性都完全函数依赖于K,那么我们称K为候选码《简称为码。 假如当K确定的情况下,该表除K之外的所有属性的值也就随之确定,那么K就是码。
- 非主属性: 包含在任何一个码中的属性成为主属性。
整那么多理解起来挺麻烦, 简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。
3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖。第三范式就是属性不依赖于其它非主属性,也就是在满足2NF的基础上,任何非主属性不得传递依赖于主属性。
基本解决了数据冗余过大,插入异常,修改异常,删除异常的问题。
暂时就到这了,有时候某些单个的概念还好,组合到一块就有点天书的味道了,简单的总结下,方便理解:
一范式就是属性不可分割,属性是是什么?就是表中的字段。
二范式就是要有主键,要求其他字段都依赖于主键。
三范式就是要消除传递依赖,方便理解,可以看做是“消除冗余”。
(消除冗余 就是各种信息只在一个地方存储,不出现在多张表中)