第9次作业-知识点整理:关于函数依赖定义、函数依赖类型
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/uzz/cs3 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/uzz/cs3/homework/13106 |
这个作业的目标 | 第9次作业-知识点整理:关于函数依赖定义、函数依赖类型 |
函数依赖的定义
1.函数依赖的定义:
函数依赖是数据库的核心部分
具体说明:
(1)函数依赖是语义范畴概念,只能根据数据的语义来确定函数的依赖。
(2)函数依赖不是指关系模式R的某个或者某些元组满足的约束条件,而是指R的所有元组均满足的约束条件,不能部分满足。
(3)函数依赖关心的问题是一个或者一组属性的值决定其他属性的值。
定义如下:
设关系R(U,F),U是属性集,F是函数依赖集,令X、Y是U的两个子集
对于任意R的一个关系r,X的每一个具体值,Y都有唯一值与之对应
则,X决定函数Y,或Y函数依赖于X,记作X→Y(X是自变量,Y是因变量,一个X只能得到一个Y)
2.平凡函数依赖
若属性集Y是X的子集,则必然存在函数依赖X→Y,这种函数依赖就是平凡的函数依赖,其他类型的函数依赖就是非平凡的函数依赖
这里是对属性集是否包含而言的,不是指属性的域的包含关系。
函数依赖类型
为了便于理解函数依赖的类型,使用这个表作为例子来理解。
一、平凡函数依赖
1.定义:设一个关系为R(U),X和Y为属性集U上的子集,当X → Y时,如果Y ⊂ X(也就是Y是X的子集) 那么称X→Y是平凡的函数依赖。
2.例子:(学号,姓名)→姓名
注意:如果有Y ⊂ X ,那么X → Y 一定成立。
3.理解:因为Y ⊂ X ,那么Y必然是X中的一部分,因为X确定了,那么自然其子集也确定了,因为整体可以决定部分。
特殊情况:Y有可能和X是一样的,因为子集可以包含自己本身,也就是自己推导自己。
二、非平凡函数依赖
1.定义:设一个关系为R(U),X和Y为属性集U上的子集,若X→Y且X不包含Y,则称X→Y为非平凡函数依赖。
2.例子:(学号、课程号)→个人成绩
相对于平凡函数依赖来说,非平凡函数依赖更为重要与常见。
三、完全函数依赖
1.定义:一个关系模式R(U)中,X和Y为属性集U上的子集,如果X→Y,且对与X的任意一个真子集Z来说,Z→Y都不成立。
这个需要分两个情况理解:
(1)X为单个属性值,这时候X→Y,那么这个关系必定为完全依赖关系。
(2)X为属性组,也就是你用他的子集无法推导出Y,必须用整个X才行。
2.例子:
(1)单个属性:学号→姓名,这个依赖关系必是完全函数依赖,因为X没真子集。
(2)属性组:学号,课程号)→个人成绩,其真子集有俩:学号和课程编号,如果只知道其中一个,是推导不出来个人成绩的,必须合在一起整体使用,所以是完全函数依赖。
四、部分函数依赖
1.定义:一个关系模式R(U)中,X和Y为属性集U上的子集,如果X→Y,对与X的真子集Z来说,存在一个Z→Y,那么X→Y为部分函数依赖。
2.例子:学号,课程号)→姓名
此时X为属性组(学号,课程号)其真子集有俩个:学号、课程号,我们通过学号可以直接得到学生的姓名,也就是学号→姓名,所以(学号,课程号)→姓名为部分函数依赖
五、传递函数依赖
1.定义:一个关系模式R(U)中,X、Y、Z为属性集U上的子集,如果X→Y,Y不能反推出X,且Y→Z,这时候通过X可以推出Z,即X→Z,我们把X→Z称为传递函数依赖。
2.例子:
学号→所在系,所在系→系主任,所以学号→系主任为传递函数依赖。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律