第九次作业
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/uzz/cs3 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/uzz/cs3/homework/13106 |
这个作业的目标 | 第9次作业-知识点整理:关于函数依赖定义、函数依赖类型 |
一、函数依赖
1、函数依赖
函数依赖分为:完全函数依赖、部分函数依赖、传递函数依赖。
函数依赖是从数学角度来定义的,在关系中用来刻画关系各属性之间相互制约而又相互依赖的情况。函数依赖普遍存在于现实生活中,比如,描述一个学生的关系,可以有学号、姓名、所在系等多个属性,由于一个学号对应一个且仅一个学生,一个学生就读于一个确定的系,因而当“学号”属性的值确定之后,“姓名”及“所在系”的值也就唯一地确定了, 此时, 就可以称“姓名”和“所在系”函数依赖于“学号”,或者说“学号”函数决定“姓名”和“所在系”,记作:学号→姓名、学号→所在系。
定义:
设 R(U) 是属性集合 U={ A1, A2, ... , An } 上的一个关系模式,X, Y 是 U 上的两个子集,若对 R(U) 的任意一个可能的关系 r ,r 中不可能有两个元组满足在 X 中的属性值相等而在 Y 中的属性值不等,则称 “ X 函数决定 Y ” 或 “ Y函数依赖于X ” 。
在一个关系 R 中,属性(组) Y 的值是由属性(组) X 的值所决定的 。又可以说,在关系 R 中,若两个元组的 X 属性值相同,那么这两个元组的 Y 属性值也相同。
补充:函数的定义:对于定义域中任意 x ,有且只有一个 y 与之对应。 属性之间的依赖:对于相同的 X 属性值,有且只有一个 Y 属性值与之对应。
2、完全函数依赖和部分函数
1)定义:
设R为任一给定关系,X、Y为其属性集,若 X→Y,且X中的任何真子集Z,都有 Z!→Y,则称 Y 完全函数依赖于 X。就是说 属性组 X 的所有属性一起(即完全)才能决定属性 Y,去掉任何一个属性都不行。相反的,部分函数依赖就是说 属性组 X 中的 部分属性就可以决定 Y ,用不着全部。如果 属性(组)Y 部分函数依赖于 属性组 X,则说明属性组 X 中存在着对属性(组) Y 的非受控冗余。在设计数据库时应避免这种情况。(对应着 2NF )。
在函数依赖的基础上,我们的A属性是一个属性组,只有这个属性组中的全部属性才能确定唯一的B属性,A的任何一个子集都不可以。
2)举例:
解释:单个学号可以决定性别和年龄,单个学号就可以决定成绩。因此,姓名,年龄和成绩对学号,课号是部分函数依赖。
3、传递函数依赖
1)定义:
在 R(U) 中,若X→Y,Y→Z,且 Y不属于Z,Z不属于Y,Z不属于X,Y!→则称 Z 传递函数依赖于 X 。
如果 X 函数决定 Y,Y 函数决定Z,且 Y、Z 都不包含于 X,Z 不包含于 Y ,Y 不能决定 X,则称 Z 传递函数依赖于 X。 注意:若X→Y,Y→Z,可以得到X→Z,但不能说 Z 传递函数依赖于 X。
传递函数依赖存在着非受控冗余。
2)举例: