关系数据库基础:函数依赖知识笔记

举报
IT技术分享社区 发表于 2023/01/14 22:42:16 2023/01/14
【摘要】 1、函数依赖的定义设R(U)是属性集U.上的关系模式,X, Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X集合上的属性值相等,而在Y上的属性值不等,则称X函数确定Y或Y函数依赖于X,记作X→Y。理解:X,Y为两个集合,对于集合X中的所有元素,在Y集合中都能找到对应。当X值不同时:X既可以对应Y的相同元素,也能对应不同元素。当X值相同时:X只能对应Y中的相同元素...

db.jpg

1、函数依赖的定义

设R(U)是属性集U.上的关系模式,X, Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X集合上的属性值相等,而在Y上的属性值不等,

则称X函数确定Y或Y函数依赖于X,记作X→Y。

理解:X,Y为两个集合,对于集合X中的所有元素,在Y集合中都能找到对应。

当X值不同时:X既可以对应Y的相同元素,也能对应不同元素。

当X值相同时:X只能对应Y中的相同元素。

2、如何判断是否存在函数依赖

必备公式如下:

1.X和Y是一对一的关系,则X→Y,Y→X

2.X和Y是多对一的关系,则X→Y

3.X和Y是多对多或是一对多的关系,则X与Y不存在依赖关系

3、函数依赖的分类

3.1 平凡函数依赖

定义:若X->Y,且Y是X的子集(对任一关系模式,平凡函数依赖必然成立),就是平凡函数依赖。

举例:

在学生表(学号,姓名,年级)中,(学号,姓名)可以推导学号和姓名其中的任何一个,就是所谓的平凡函数依赖。

简单来说,就是只要Y是X的子集,Y就依赖于X。

3.2  非平凡函数依赖

定义:若X->Y,但Y不是X的子集,就是非平凡函数依赖。

举例:学生表(学号,姓名,年级,性别)中,通过(学号,姓名)可以推出这个学生所在的年级,但年级不是(学号,姓名)的子集,这是非平凡函数依赖.((学号,姓名)就是一个x,学号或者姓名就是一个x')。

3.3. 完全函数依赖

定义:在R(U)中,如果X->Y。并且对于X的任何一个真子集X‘,都有X'-/->Y,则称Y对X有完全函数依赖,记作X->Y(箭头上有个大写F)。

举例:

1:在学生表(学号,姓名,年级)中,通过属性“学号”就可以推出“年级”,说明“年级”完全依赖于“学号”,这就是完全函数依赖。

2:“一门课的成绩”对(学号,课程号)是完全函数依赖。学号和课程号可以确定对应课程成绩,但是学号和课程号它们谁都不能单独确定成绩。

也就是说X内任意一个真子集(真子集不包含它本身),都不能唯一确定Y。 

3.4. 部分函数依赖

定义:若X->Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X->Y(箭头上有个大写P)。

举例:

1:在学生表(学号,姓名,年级)中,(学号,姓名)虽然也可以推出年级,但是它的真子集姓名却推不出年级,这就是部分函数依赖,也叫不完全函数依赖。

2:“院系”对(学号,课程号)是部分函数依赖。课程号和学号一起可以确定院系,但学号是(学号,课程号)的真子集,并且学号单独可以确定院系。

3.5 传递函数依赖

定义:在R(U)中,如果X->Y(Y不是X的子集),Y-/->X,Y->Z,Z是Y的子集,则称Z对X传递函数依赖。记为X->Z(箭头上是汉字 “传递”)

举例:

学号->院系,院系->院长名,学号->院长名。

简单点说就是X确定Y,Y不是X子集,Y能确定Z,Z不是Y子集,Y不能确定X。 

3.6 直接函数依赖

定义:在R(U)中,如果X->Y,Y不是X的子集,Y->Z,Z是Y的子集,则称Z对X传递函数依赖。记为X->Z(箭头上是汉字 “直接”)

简单来说就是X确定Y,Y不是X子集,Y能确定Z,Z不是Y子集。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。