介绍函数依赖之前先非形式的说一下数据依赖。

数据依赖是一个关系内部属性与属性之间的一种约束关系。这种约束关系是通过属性间的相等与否体现出来的数据见相关联系。

函数依赖是数据依赖的一个重要类型。

先来看一下函数依赖的定义:

函数依赖:设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的子集。XY,但是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={学号,姓名,年龄,班号,班长,课号,成绩}

  • {学号,课号}
  • {学号,课号}姓名
  • {学号,课号}成绩

解析:1.学号能决定姓名,年龄,班号,班长,但是不能决定课号。

{学号,课号}S ,对应完全函数依赖的定义:X的任何一个真子集X’,都有Y不函数依赖于X’,即单独的学号不能决定S,单独的课号不能决定S,所以S对{学号,课号}的函数依赖为完全函数依赖

2.{学号,课号}姓名,单独的学号可以决定姓名,所以姓名部分函数依赖于{学号,课号}

3.{学号,课号}成绩,单独的学号决定不了一个同学的成绩,单独的课号也决定不了,组合在一起能决定,即为完全函数依赖。

例题:2.1:

Y{员工码,姓名,出生日期,联系电话,最后学历,毕业学校,培训日期,培训内容}

  • {员工码,培训日期}Y
  • {员工码,培训日期}{姓名,出生日期}

S{学号,姓名,班级,课号,课程名,成绩,教师,教师职务}

  • {学号,课号}S
  • {学号,课号}课程名

传递函数依赖

定义:关系R中,X、Y、Z是属性集,X决定Y的值(XY),Y不决定X,Y决定Z的值(Y→Z),则有X决定Z(X→Z) 称Z传递函数依赖于X

比如:S={学号,姓名,年龄,班号,班长,课号,成绩}

  • 学号→班号 ;班号→班长
  • 学号→班长  注:班长传递函数依赖于学号

纯手打,如果文中有错误,欢迎各位同学指出,如果对你的学习有帮助,也给同学我一个赞吧哈哈哈哈

参考文献:数据库系统概论-第5版(王珊)