数据库之函数依赖

时间:2024-04-07 07:59:17

前言

      今天又重新拾起了《数据库系统原理》,因为之前对它学的不够扎实,所以现在需要重新进行深入的学习,函数依赖这一部分虽然不是特别难,但是我就是有点“迷”,老是有点弄不清楚,所以今天抽出点时间“收拾”他一下,下面和大家分享一下“收拾过程”!!!

收拾过程

  • 什么是函数依赖?
    • 定义:设一个关系为R(U),X和Y为属性集U上的子集,若对于X上的每个值都有Y上的一个唯一值与之对应,则称X和Y具有函数依赖关系,并称X 函数决定Y,或称Y函数依赖于X,记作X→Y,称X为决定因素。
    • 简单地说,函数依赖就是:知道A可以确切的找到B,这样的函数叫做函数依赖。其实就是单值函数:例如:f(x)=2x(PS:后面会有详细的示例说明)
      数据库之函数依赖

数据库之函数依赖

  • 示例:
    如通过学号和专业两个属性,1号可以确定是计算机(是函数依赖),但是通过年龄和专业这两个属性来判断,21岁,有中文,有英文,不能确定下来(不是函数依赖)
  • 什么是完全函数依赖?
    数据库之函数依赖

    • 示例:
      SC(S#,C#,GRADE)       说明:S#:学号,C#:课程号,GRADE:成绩,S#→\C#,S#→\GRADE,单个属性不能作为决定因素,但是组合起来可以,即(S#,C#)→GRADE,注:(S#,C#)相当于X,GRADE相当于Y。
  • 什么是部分函数依赖?

    • 定义:设一个关系为R(U),X和Y为属性集U上的子集,若存在X→Y,同时X的一个真子集X’也能够函数决定Y,即存在X’→Y,则称X→Y的函数依赖为部分函数依赖,或者说,X部分函数决定Y,Y部分函数依赖于X;否则若在X中不存在一个真子集X’,使得X’也能够函数决定Y,则称X完全函数决定Y,或Y完全函数依赖于X。X→Y的部分函数依赖也称为局部函数依赖。
      数据库之函数依赖

    • 示例:

职工号 姓名 性别 年龄 职务
1001 张三 36 正处
1002 李四 38 副处
1003 王五 50 正科
1004 赵六 38 副处
1005 孙七 49 科员

       上述职工关系中,职工号和其他每个属性之间的函数依赖都是完全函数依赖,以为职工号是一个单属性决定因素,他不可能在包含其他任何属性,那么就不存在真子集函数决定其他每个属性的情况存在,如(职工号,性别)的值虽然能够决定相应职工的年龄,但其中的真子集“职工号”就能够函数决定其年龄,所以(职工号,性别)到年龄之间的函数为部分函数依赖(因为只通过“职工号”就可以决定)。(简单的说:真子集可以决定结果)

  • 什么是传递函数依赖?
    数据库之函数依赖
           定义:一个关系R(U),X,Y,Z为属性集U上的子集,其中存在X→Y和Y→Z,但Y不决定X,同时Y不包含Z,则存在X→Z,即X传递函数决定Z,Z传递函数依赖于X。
           注意:在这里强调的是Y不反过来函数决定X,因为如果X→Y,同时Y→X,则X和Y为相互决定的函数依赖关系,记做“X←→Y”,这样X和Y是等价的,在函数依赖中是可以相互转化的,X→Z就是直接函数依赖,而不是传递函数依赖了。

    • 示例:
             如:设一个学生关系为(学号,姓名,性别,系号,系名,系主任名),一般每个学生只属于一个系,每个系有许多学生,每个系都对应唯一的系名和系主任名。
             传递函数依赖分析:在该关系中,学号能够函数决定姓名、性别和系号,即存在“学号→姓名”、“学号→性别”、“学号→系号”,系号又能够函数决定系名和系主任名,即存在“系号→系名”和“系号→系主任名”。由于学号决定系号,系号又决定系名和系主任名,所以给定一个学号之后也就能够唯一对应一个系名或系主任名,也就是说,在学生关系中还存在“学号→系名”和“学号→系主任名”这两个函数依赖是传递函数依赖。
  • 什么是最小函数依赖?

    • 定义:设一个关系为R(U),X和Y为U的子集,若X→Y为完全函数依赖,同时Y为单属性,则称X→Y为R的最小函数依赖。由R中所有最小函数依赖构成R的最小函数依赖集,并且在最小函数依赖集中不应含有冗余的传递函数依赖。
    • 示例:
      • 设一个关系为R(A,B,C,D),它的函数依赖集为FD={A→B,B→C,A→C,B→D},判断它是否为R的最小函数依赖集。
    • 分析:由FD中的A→B和B→C可得到A→C,也就是说A→B和B→C中已经蕴涵A→C,所以给出的A→C是冗余的,应去掉。原FD不是R的一个最小依赖集,若修改为FD={A→B,B→C,B→D},就成为R的最小函数依赖集。
  • 如何根据函数依赖求出关系中的侯选码?

    • 定义:设一个关系为R(U),X为U的一个子集,若X能够函数决定U中的每个属性,并且X的任何真子集都不能函数决定U中的每个属性,则称X为关系R的一个候选码。
    • 解析:
      • 由于一个候选码能够函数决定关系中的每个属性,根据函数依赖的合并规则,可知候选码能够函数决定整个元组,即所有属性。也可以说:若关系中的一个属性或属性组能够函数决定整个元组,并且它的任何子集都不能函数决定整个元组,则它被称为该关系的一个候选码。
    • 示例一:
      • 在上面介绍过的职工关系中,职工号属性能够函数决定职工号、姓名、性别、年龄、职务等所有属性,并且职工号为单属性,不可再分,肯定不会存在任何子集能够函数决定整个元组,所以职工号为该关系的一个候选码;若在该关系中还带有身份证号属性,则身份证号属性的每一个值也能够唯一标识一个元组,所以也能够函数决定关系中的所有属性,因此身份证号也是一个候选码。
    • 示例二:
      • 设一个教学关系为(教师号,姓名,课程号,课程名,课程学分,专业号,专业名,教学等级分),假定每个教师有一个唯一的教师号,每门课程有一个唯一的课程号,每个专业有一个唯一的专业号,每个教师号对应一个姓名,每个课程号对应一个课程名和一个课程学分,每个专业号对应一个专业名,教学等级分是根据某个教师给某个专业上某门课程的教学评价效果而得到的分数,每个教师可以给不同的专业上不同的课程,请通过函数依赖分析,求出该关系的候选码。
    • 分析:
      • FD={教师号→姓名,课程号→课程名,课程号→课程学分,专业号→专业名,(教师号,课程号,专业号)→教学等级分}。
        由FD可以看出,只有(教师号,课程号,专业号)能够函数决定每个属性,并且它的任何真子集都不能函数决定每个属性,所以(教师号,课程号,专业号)是该关系的唯一一个候选码。
  • 什么是平凡和非平凡函数依赖?

    • 定义:设一个关系为R(U),X和Y为属性集U上的子集,若X→Y且X不包含Y,则称X→Y为非平凡函数依赖,否则若X Y则必有X→Y,称此X→Y 为平凡函数依赖。
    • 分析:在一个职工关系中,职工号总能函数决定它本身,记作“职工号→职工号”,对于任一个给定的职工号,都有它本身的职工号值唯一对应,此为平凡函数依赖。又如:职工号和性别构成的属性子集总是能够函数决定其中的职工号或性别属性,可分别记作为“(职工号,性别)→职工号”和“(职工号,性别)→性别”,因为对于任何给定的一个元组中的职工号和性别的组合值,都唯一对应一个职工号值或性别值,不可能出现其他的职工号值或性别值,此种也为平凡函数依赖。
    • 非平凡函数依赖,即X→Y且X Y。如在职工关系中,职工号函数决定其他每个属性都是非平凡函数依赖,另外“(职工号,姓名)→性别”也是非平凡函数依赖,虽然在这里由决定因素中所含的职工号单属性就能够函数决定性别,而带有的姓名属性有些多余。

    小结

               这一部分总算是总结完了,可以告一小段落了,这回自己原来不明白的地方现在都清楚了,这些都是自己对这一部分的理解,可能会有些许出入,但是还是希望能帮助到一些需要帮助的人,同时也欢迎大家在下方评论区留言,互相交流一下!!!