介于书本上的概念太过于抽象,且本文的芝士经常在面试中被提及,所以用自己的话解释一下,加深印象。
完全、部分函数依赖
完全函数依赖:X–>Y,对于X的任意一个真子集,都有该真子集无法推出Y,则称Y对X完全函数依赖
部分函数依赖:X–>Y,但是Y不完全函数依赖于X,则称Y对X部分函数依赖。
三范式
一范式:每个分量是不可分的数据项
二范式:满足一范式且表中不存在属性对主键部分函数依赖(即依赖于主键的一部分)
如S(Sno,Sname,age,Cno,grade),主键(Sno,Cno)
grade由Sno,Cno决定,但是Sname,age可只由Sno决定,所以不满足2NF
解决方法:一张表解决一件事
S—>S(Sno,Sname,age),SC(Sno,Cno,grade)
三范式:满足二范式,且不存在属性对于主键传递函数依赖
如:Teacher(T#,sal_level,salary)
T#---->sal_level ,sal_level—>salary
解决方法:分为Teacher(T#,sal_level) ,level(sal_level, salary)
BCNF范式
每个决定因素都含有码,需要消除主属性对码的部分、传递函数依赖