介绍函数依赖之前先非形式的说一下数据依赖。
数据依赖是一个关系内部属性与属性之间的一种约束关系。这种约束关系是通过属性间的相等与否体现出来的数据见相关联系。
函数依赖是数据依赖的一个重要类型。
先来看一下函数依赖的定义:
函数依赖:设R(U)是属性集U上的关系模式,X,Y是U的子集。若对于X上的每个值都有Y上的一个唯一值与之对应,则称X和Y具有函数依赖关系,并称X函数决定Y,或称Y函数依赖于X,记作X→Y,称X为决定因素。
比如:设一个学生关系S={学号,姓名,性别,年龄}
解析:在关系S中,很明显可以看出学号为主码,在该关系中每个学生的学号(X),都对应姓名属性(Y)中唯一的一个值,也可以说成一个学生的姓名由其学号唯一决定,这也就对应了定义所描述的,即学号决定姓名,或者姓名依赖于学号,学号是决定因素。同理,当一个学生的学号被确定下来之后,他的性别,年龄也就确定了。可以记为学号→{姓名,性别,年龄},也可以分开来记学号→姓名,学号→性别····
在该学生关系中,除了学号,为什么其他的属性称为决定因素形成函数依赖?因为对于它们的每个属性值,都可能对应另一属性的多个不同的取值,比如年龄属性取一个“23”,则会对应多个学号而不是一个,与定义相违背。
例题1.1:学生{学号,姓名,年龄,班号,班长,课号,成绩},则其中有哪些函数依赖关系?
- 学号→{姓名,年龄}
- 班号→班长
- {学号,课号}→成绩
1.2:客户{客户号,客户名称,类别,联系电话,产品编号,产品名称,数量,要货日期}
- 客户号→{客户名称,年龄}
- 产品编号→产品名称
- {客户号,产品编码,要货日期}→数量
属性A | 属性B | 属性C |
1 | 2 | 3 |
4 | 2 | 3 |
5 | 3 | 3 |
1.3:表格存在的函数依赖有:A→B,B→C
注意:函数依赖是语义范畴的概念,只能根据语义来确定一个函数依赖。比如姓名→年龄这个函数依赖只有在班级中没有同名人的条件下才能成立。若允许有同名人的情况下年龄就不函数依赖于姓名了。
z函数依赖的特性
- 设R(U)是属性集U上的关系模式,X,Y是U的子集。X→Y,但是Y不包含X,则称X→Y是非平凡函数依赖,相反若Y包含X,则称X→Y是平凡函数依赖
解析:在学生关系中,学号总能决定它本身,记作“学号→学号”,对于任一个给定的学号,都有它本身的学号值唯一对应,此为平凡函数依赖。学号函数决定其他每个属性都是非平凡函数依赖,比如学号→性别,另外{学号,年龄}→性别,这样也是非平凡函数依赖
部分函数依赖和完全函数依赖
定义:在R(U)中,若存在X→Y,同时X的任何一个真子集X’,都有Y不函数依赖于X’,则称Y对X的函数依赖为完全函数依赖。
记作:XY
若存在X→Y,但Y不完全函数依赖于X,则称Y部分函数依赖于X,或者X部分函数决定Y。
记作:XY
比如:S={学号,姓名,年龄,班号,班长,课号,成绩}
- {学号,课号}S
- {学号,课号}姓名
- {学号,课号}成绩
解析:1.学号能决定姓名,年龄,班号,班长,但是不能决定课号。
{学号,课号}S ,对应完全函数依赖的定义:X的任何一个真子集X’,都有Y不函数依赖于X’,即单独的学号不能决定S,单独的课号不能决定S,所以S对{学号,课号}的函数依赖为完全函数依赖。
2.{学号,课号}姓名,单独的学号可以决定姓名,所以姓名部分函数依赖于{学号,课号}
3.{学号,课号}成绩,单独的学号决定不了一个同学的成绩,单独的课号也决定不了,组合在一起能决定,即为完全函数依赖。
例题:2.1:
Y{员工码,姓名,出生日期,联系电话,最后学历,毕业学校,培训日期,培训内容}
- {员工码,培训日期}Y
- {员工码,培训日期}{姓名,出生日期}
S{学号,姓名,班级,课号,课程名,成绩,教师,教师职务}
- {学号,课号}S
- {学号,课号}课程名
传递函数依赖
定义:关系R中,X、Y、Z是属性集,X决定Y的值(X→Y),Y不决定X,Y决定Z的值(Y→Z),则有X决定Z(X→Z) 称Z传递函数依赖于X
比如:S={学号,姓名,年龄,班号,班长,课号,成绩}
- 学号→班号 ;班号→班长
- 学号→班长 注:班长传递函数依赖于学号
纯手打,如果文中有错误,欢迎各位同学指出,如果对你的学习有帮助,也给同学我一个赞吧哈哈哈哈
参考文献:数据库系统概论-第5版(王珊)