对数据库中关系的第一范式、第二范式、第三范式等基础理论知识记录说明。
基本概念
函数依赖
一组属性的值可以决定另一组属性的值。$x \rightarrow f(x)$。
非平凡函数依赖:$X\rightarrow Y ;且 Y \nsubseteq X$
平凡函数依赖:$X\rightarrow Y ;且 Y \subseteq X$
完全函数依赖:非主属性完全依赖于主属性,少一个都不能推出。
部分函数依赖:非主属性可以又主属性部分推出得到。
范式
第一范式
一个关系模式R的所有属性都是不可分的基本数据项。
反例:

成绩这一列还能再分,不满足第一范式。
第二范式
满足第一范式基础上,每个非主属性都完全依赖于码。
员工编号 | 销售日期 | 销售金额 | 小组编号 | 组长名称 |
---|
这里员工编号和销售日期可以确定一条销售金额,主属性是员工编号和销售日期,但是由员工编号可以推出小组编号和组长名称。小组编号和组长名称是部分函数依赖于码。所以不满足第二范式。
可拆分表:
员工编号 | 销售日期 | 销售金额 |
---|
员工编号 | 小组编号 | 组长名称 |
---|
从第一范式到第二范式就是消除非主属性对码的部分函数依赖。
第三范式
满足第二范式的基础上,每个非主属性对码都不传递依赖于R的候选码。
例如:
员工编号 | 小组编号 | 组长名称 |
---|
存在着$员工编号\rightarrow 小组编号$,$员工编号\rightarrow 组长名称$,就有$员工编号\rightarrow 小组编号\rightarrow 组长名称$。存在传递依赖,不满足第三范式。
可拆分表:
员工编号 | 小组编号 |
---|
小组编号 | 组长名称 |
---|
从第二范式到第三范式就是消除非主属性对码的传递依赖。
BC范式
在第三范式基础上,消除主属性对主键的部分和传递依赖。
示例:
歌曲编号 | 歌曲名称 | 歌手 | …… |
---|
这里的歌曲编号、歌曲名称、歌手是候选码(主键),但存在$歌曲名称\rightarrow歌手$的部分依赖,不符合BC范式。
这里第二范式、第三范式都是对非主属性消除部分依赖和传递依赖,BC范式是对主属性消除部分依赖和传递依赖。