第9次作业-知识点整理:关于函数依赖定义、函数依赖类型
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/uzz/cs3 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/uzz/cs3/homework/13102 |
这个作业的目标 | 第9次作业-知识点整理:关于函数依赖定义、函数依赖类型 |
函数依赖
1.函数依赖
-
概念
数据依赖的一种,它反映属性或属性组之间相依存,互相制约的关系,即反映现实世界的约束关系。
-
定义
设R(U)是属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,对于X的每一个具体值,Y都有唯一的具体值与之对应,则称X函数决定Y,或Y函数依赖X,记作X→Y,称X为决定因素,Y为依赖因素。
例如:
在一所学校中,每一个学号对应于唯一的一个姓名,此时就有{学号}→{姓名};但由于可能有重名的情况发生,一个姓名可能对应着多个不同的学号,因此{姓名}→{学号}是不成立的。 在关系型数据库中,我们可以根据函数依赖关系进行SQL语句合法性的判断,也可以对语句进行改写和化简。
-
说明:
(1)函数依赖和其他数据依赖一样,是语义范畴概念,只能根据数据的语义来确定函数依赖。
(2)函数依赖不是指关系模式R的某个或某些元组满足的约束条件,而是指R的所有元组均要满足
2. 函数依赖的类型
-
完全函数依赖
设有关系模式R(U),U是属性集,X和Y是U的子集,如果X→Y是一个函数依赖,且对X的任何一个真子集X'都不存在X'→Y,则称X→Y是一个完全函数依赖,即Y完全函数依赖于X即在一张表中字段分为 X 和 Y 两个集合,X集合数据唯一确定一条数据 Y ,X集合字段中的任何一个字段都不能确定唯一条数据Y就称Y完全函数依赖于X
举例:
通过{学生学号, 选修课程名}可以得到{该生本门选修课程的成绩},而通过单独的{学生学号}或者单独的{选修课程名}都无法得到该成绩,则说明{该生本门选修课程的成绩}完全依赖于{学生学号,选修课程名}
-
部分函数依赖
设有关系模式R(U),U是属性集,X和Y是U的子集,如果X→Y是一个函数依赖,且对X的任何一个真子集X'都存在X'→Y,则称X→Y是一个部分函数依赖,即Y部分函数依赖于X即在一张表中分为 X 和 Y 集合,X集合数据唯一确定一条数据Y,并且X中任意字段或组合字段都可以唯一确定Y集合数据,则称 Y 部分函数依赖于 X
举例:
通过{学生学号,课程号}可以得到{该生姓名},而通过单独的{学生学号}已经能够得到{该生姓名},则说明{该生姓名}部分依赖于{学生学号,课程号}; 又比如, 通过{学生学号,课程号}可以得到{课程名称},而通过单独的{课程号}已经能够得到{课程名称},则说明{课程名称}部分依赖于{学生学号,课程号}。(部分依赖会造成数据冗余及各种异常。)
-
传递函数依赖
在关系模式R(U)中,设X,Y,Z是U的不同的属性子集,如果X确定Y、Y确定Z,且有X不包含Y,Y不确定X,(X∪Y)∩Z=空集合,则称Z传递函数依赖(transitive functional dependency) 于X。即在一张表中,字段分为 X、Y、Z,如果X可以决定Y,Y决定Z,但是Y不能决定X,则称Z传递函数依赖于X
举例:
对于表Student(sno,cno,Grade,Sdept),默认分数和系别在表中允许存在相同的值,学号和课程号都不允许存在相同的值。
-
完全函数依赖和部分函数依赖的判断:
对于表Student(sno,cno,Grade,Sdept),默认分数和系别在表中允许存在相同的值,学号和课程号都不允许存在相同的值。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律