第9次作业-知识点整理:关于函数依赖定义、函数依赖类型

发布时间 2023-11-18 16:02:22作者: 羡慕南飞雁

?第9次作业-知识点整理:关于函数依赖定义、函数依赖类型?

这个作业属于哪个课程 https://edu.cnblogs.com/campus/uzz/cs3
这个作业要求在哪里 https://edu.cnblogs.com/campus/uzz/cs3/homework/13106
这个作业的目标 第9次作业-知识点整理:关于函数依赖定义、函数依赖类型

?函数依赖的定义

?1. 定义

函数依赖是关系模式中,属性之间的逻辑依赖关系
定义如下:
设关系R(U,F),U是属性集,F是函数依赖集,令X、Y是U的两个子集
对于任意R的一个关系r,X的每一个具体值,Y都有唯一值与之对应
则,X决定函数Y,或Y函数依赖于X,记作X→Y(X是自变量,Y是因变量,一个X只能得到一个Y)

若X→Y且Y→X,则X↔Y
不依赖则是在箭头上画上斜线
简单说,若X→Y,那么在关系r上任意两个元组,若ti[X] = tj[X],那么ti[Y] = tj[Y],在这里就要联想到函数的单映射和双映射了

?例子
  • 函数依赖:在一个表里面,属性X可以映射到属性Y,也就是说知道了X就能确定Y,称X为决定因素。
    有一个关系模式S(Sno,Sname,Sage)
    如果知道了一个学生的学号Sno,那我就能确定他的姓名Sname和年龄Sage。

?2. 平凡函数依赖

若属性集Y是X的子集,则必然存在函数依赖X→Y,这种函数依赖就是平凡的函数依赖,其他类型的函数依赖就是非平凡的函数依赖

这里是对属性集是否包含而言的,不是指属性的域的包含关系

3.函数依赖于属性之间联系的关系

当X与Y有1:1联系时,一定有X↔Y
当X与Y有m:1联系时,有X→Y
当X与Y有m:n联系时,X、Y之间不存函数依赖

函数依赖的逻辑蕴涵

?1.逻辑蕴涵

设F是关系模式R的函数依赖集,X、Y是属性集U的子集,X→Y是一个函数依赖,若在F中,能够用其他函数依赖关系推导出X→Y,则X→Y为F的逻辑蕴涵,或F逻辑蕴涵X→Y,记作F|=X→Y
闭包
F是R的函数依赖集,被F逻辑蕴涵的函数依赖的集合称为F的闭包
记作F+
F+={X→Y | F|=X→Y}

除了函数依赖集的闭包外,属性集也存在闭包运算,如下
属性集X的闭包X+ =属性A | X→A在F+中

?函数依赖的推导规则

以上的XY这样的形式,不是离散中的集合求交集,而是将他们合并
此外如:Y⊆X,是Y中的属性是X中属性的子集,如Y(姓名,性别),X(姓名、性别、年龄),那么Y就⊆X

?完全函数依赖与部分函数依赖

?完全函数依赖

若X→Y,且对于X的任意真子集X’,都不满足X’→Y,则Y对X完全函数依赖,记作

?部分函数依赖

若X→Y,且对于X的任意真子集X’,存在X’→Y,则Y对X部分函数依赖,记作

?传递函数依赖

X→Y,且Y→X不成立,而有Y→Z(其中Y不属于X,Z不属于Y),则有Z对X传递函数依赖,记作

为什么不能有Y→X,是因为,如果这个条件成立,X→Z就不是传递得来的,而是直接能得到的
属于关系不存在的限制也是一样,是为了排除平凡函数依赖

?例子

有一个关系模式S(Sno,Sname,Cno,Grade)

  • 完全函数依赖:如果我想知道某位学生的某一门课的成绩Grade,那我必须得同时知道他的学号Sno和课程号Cno。
    但如果我只知道一部分信息,比如他的Sno或者Cno可以吗?答案是不行的!此时称Y[Grade]完全依赖于X[Sno,Cno]。
  • 部分函数依赖:如果我想知道某位学生的姓名Sname,那我知道他的学号Sno就可以了。也就是说Y[Sname]只函数依赖于X[Sno,Cno]中的子集x[Sno],此时称Y部分函数依赖于X。
  • 传递函数依赖
    有一个关系模式S(Sno,Sdept,Mname)
    如果我知道了一个学生的学号Sno,那我就能知道他所在的系Sdept。(因为理论上一个学生只属于一个系)
    如果我知道了某一个系Sdept,那么我就能知道这个系的系主任的姓名Mname。(一个系只有一个正的系主任)
    也就是说,我知道了一个学生的学号Sno,其实我就知道了他所在系的系主任的姓名Mname。但这个过程中,他们是不存在直接函数依赖的,我需要通过系名称Sdept作为一个桥梁去把二者联系起来的。

?候选键在函数依赖中的定义

?1.定义

U是关系R的属性集,若属性集X→U在R上成立,X是R的一个超键
在X是超键的基础上,若X的任一真子集X’ 都有
X’ →U不成立,那么X是R上的一个候选键

由此可知,其他所有属性对于候选键都是完全函数依赖的

?2.如何在函数依赖中寻找候选键

对属性进行分类

  • L类:只出现在→左边的属性,必为候选键之一,若X+包含了R的所有属性,则X是唯一的候选键
  • R类:只出现在→右边的属性,则它是非主属性
  • N类:在→两边都没出现过的属性,它是主属性
  • LR类:在→左右两边都出现过的属性,且X+包含了R的所有属性,则X是唯一的候选键

函数依赖的主要作用是,在建立号关
系数据 表之后,可以通过它来对数据表进行检查,看是否符合规则
完全函数依赖域部分函数依赖的区别在于X的子集能否满足X’→Y
在求解函数依赖的闭包时,一定要全面,不能忘记F本身

?总结

函数依赖的主要作用是,在建立号关
系数据 表之后,可以通过它来对数据表进行检查,看是否符合规则
完全函数依赖域部分函数依赖的区别在于X的子集能否满足X’→Y
在求解函数依赖的闭包时,一定要全面,不能忘记F本身>

?思维导图