快速理解数据库函数依赖(平凡函数依赖、非平凡函数依赖、完全函数依赖、部分函数依赖、传递依赖)
2023-05-27 14:32阅读:
在我们学习数据库的范式之前,我们需要理解一下有关函数依赖的一些知识。
我们数据库中常说的函数依赖其实是数据依赖的一种,数据依赖除了函数依赖还有多值依赖和连接依赖。其中最重要的是函数依赖。
函数依赖的概念
函数依赖是关系模式中各个属性之间的一种依赖关系,是规范化理论中最为重要和基础的概念。
为了便于理解,直接通过以下一个例子进行讲解。
学生表
学号 姓名 专业名 性别 出生日期 本学期学分
42014601 小明 信管 男 2000-2-11 24
42014602 小红 电商 女 2001-8-7 24
42014603 二丫 财会 女 2001-9-4 24
42014604 狗蛋 物流 男 2002-10-18 24
我们观察以上的表,其中学号、姓名、性别、出生日期、本学期学分,这些我们可以看作是不同的属性,假设我们已知一个同学的学号为42014603,我们就可以得到这个人的姓名为二丫,专业为财会,性别为女等信息。
也就是说在此表中如果说已知了一个学号值,我们可以通过这个学号值查找到这个学号对应的唯一的姓名,也可以通过这个学号值得到唯一的专业名。
上面这种属性(属性组)和属性(属性组)之间一对一的推导关系便为函数依赖
我们用一个“→”来表示这种函数依赖关系。即X→Y,其所表达的含义为Y依赖于X(注意是后依赖前)
例如:学号→姓名,学号→专业名,学号→性别,学号→出生日期,学号→本学期学分
几种特定的函数依赖
为了便于理解下面内容,我们用以下这个表作为例子。
学号 姓名 课程号 个人成绩
011 小马 020114 99
平凡函数依赖
定义: 设一个关系为R(U),X和Y为属性集U上的子集,当X → Y时,如果Y ⊂ X(也就是Y是X的子集) 那么称X→Y是平凡的函数依赖。(这时候的X一般为属性组,Y为单个属性或者属性组)
举例:(学号,姓名)→姓名
注意:如果有Y ⊂ X ,那么X → Y 一定成立。
解释:因为Y ⊂ X ,那么Y必然是X中的一部分,因为X确定了,那么自然其子集也确定了,因为整体可以决定部分。
特殊情况:Y有可能和X是一样的,因为子集可以包含自己本身
我们数据库中常说的函数依赖其实是数据依赖的一种,数据依赖除了函数依赖还有多值依赖和连接依赖。其中最重要的是函数依赖。
函数依赖的概念
函数依赖是关系模式中各个属性之间的一种依赖关系,是规范化理论中最为重要和基础的概念。
为了便于理解,直接通过以下一个例子进行讲解。
学生表
学号 姓名 专业名 性别 出生日期 本学期学分
42014601 小明 信管 男 2000-2-11 24
42014602 小红 电商 女 2001-8-7 24
42014603 二丫 财会 女 2001-9-4 24
42014604 狗蛋 物流 男 2002-10-18 24
我们观察以上的表,其中学号、姓名、性别、出生日期、本学期学分,这些我们可以看作是不同的属性,假设我们已知一个同学的学号为42014603,我们就可以得到这个人的姓名为二丫,专业为财会,性别为女等信息。
也就是说在此表中如果说已知了一个学号值,我们可以通过这个学号值查找到这个学号对应的唯一的姓名,也可以通过这个学号值得到唯一的专业名。
上面这种属性(属性组)和属性(属性组)之间一对一的推导关系便为函数依赖
我们用一个“→”来表示这种函数依赖关系。即X→Y,其所表达的含义为Y依赖于X(注意是后依赖前)
例如:学号→姓名,学号→专业名,学号→性别,学号→出生日期,学号→本学期学分
几种特定的函数依赖
为了便于理解下面内容,我们用以下这个表作为例子。
学号 姓名 课程号 个人成绩
011 小马 020114 99
平凡函数依赖
定义: 设一个关系为R(U),X和Y为属性集U上的子集,当X → Y时,如果Y ⊂ X(也就是Y是X的子集) 那么称X→Y是平凡的函数依赖。(这时候的X一般为属性组,Y为单个属性或者属性组)
举例:(学号,姓名)→姓名
注意:如果有Y ⊂ X ,那么X → Y 一定成立。
解释:因为Y ⊂ X ,那么Y必然是X中的一部分,因为X确定了,那么自然其子集也确定了,因为整体可以决定部分。
特殊情况:Y有可能和X是一样的,因为子集可以包含自己本身
