前提知识
什么是键码?
如果一个属性或多个属性的集合{A,B,C,D….}满足下面的条件,称为关系R的键码。
1、这些属性函数决定该关系的所有其它属性
2、{A,B,C,D….}的任何真子集都不能函数决定R的其它属性,也就是说{A,B,C,D….}必须是最小的
什么是主属性?
键码所在的属性成为主属性。什么是非主属性?
非键码所在的属性称为非主属性。例子:
比如上图中,Sno
和Cname
就是主属性,其他的为非主属性。{Sno,Cname}
为键码。
关于函数依赖
部分函数依赖
:设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。
举个例子:学生基本信息表R中(学号,身份证号,姓名)当然学号属性取值是唯一的,在R关系中,(学号,身份证号)->(姓名),(学号)->(姓名),(身份证号)->(姓名);所以姓名部分函数依赖与(学号,身份证号);
完全函数依赖
:设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。
例子:学生基本信息表R(学号,班级,姓名)假设不同的班级学号有相同的,班级内学号不能相同,在R关系中,(学号,班级)->(姓名),但是(学号)->(姓名)不成立,(班级)->(姓名)不成立,所以姓名完全函数依赖与(学号,班级);
传递函数依赖
:设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。
例子:在关系R(学号 ,宿舍, 费用)中,(学号)->(宿舍),宿舍!=学号,(宿舍)->(费用),费用!=宿舍,所以符合传递函数的要求;
来自 https://blog.csdn.net/rl529014/article/details/48391465
四种范式
- 第一范式
如果一个关系模式中所有属性都是不可分割的基本属性
,则这个关系模式属于第一范式
- 第二范式
如果一个关系模式属于第一范式,其中所有非主属性都完全函数依赖于键码
,则属于第二范式
- 第三范式
如果一个关系模式属于第一范式,其中所有非主属性都不传递依赖于键码
,则属于第三范式
- BC范式
如果一个关系模式属于第一范式,其中所有属性都不传递依赖于键码
,则属于BC范式
一张图总结: