快速理解数据库函数依赖(平凡函数依赖、非平凡函数依赖、完全函数依赖、部分函数依赖、传递依赖)

在我们学习数据库的范式之前,我们需要理解一下有关函数依赖的一些知识。

我们数据库中常说的函数依赖其实是数据依赖的一种,数据依赖除了函数依赖还有多值依赖连接依赖。其中最重要的是函数依赖

函数依赖的概念

函数依赖是关系模式中各个属性之间的一种依赖关系,是规范化理论中最为重要和基础的概念。

为了便于理解,直接通过以下一个例子进行讲解。

学生表
学号姓名专业名性别出生日期本学期学分
42014601小明信管2000-2-1124
42014602小红电商2001-8-724
42014603二丫财会2001-9-424
42014604狗蛋物流2002-10-1824

我们观察以上的表,其中学号、姓名、性别、出生日期、本学期学分,这些我们可以看作是不同的属性,假设我们已知一个同学的学号为42014603,我们就可以得到这个人的姓名为二丫,专业为财会,性别为女等信息。

也就是说在此表中如果说已知了一个学号值,我们可以通过这个学号值查找到这个学号对应的唯一的姓名,也可以通过这个学号值得到唯一的专业名。

上面这种属性(属性组)属性(属性组)之间一对一的推导关系便为函数依赖

我们用一个“→”来表示这种函数依赖关系。即X→Y,其所表达的含义为Y依赖于X(注意是后依赖前)

例如:学号→姓名,学号→专业名,学号→性别,学号→出生日期,学号→本学期学分

几种特定的函数依赖

为了便于理解下面内容,我们用以下这个表作为例子。

学号姓名课程号个人成绩
011小马02011499

平凡函数依赖

定义: 设一个关系为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是一样的,因为子集可以包含自己本身,也就是自己推导自己。

非平凡函数依赖

定义:设一个关系为R(U),X和Y为属性集U上的子集,若X→Y且X不包含Y,则称X→Y为非平凡函数依赖。

举例:

(学号、课程号)→个人成绩   

相对于平凡函数依赖来说,非平凡函数依赖更为重要与常见

完全函数依赖

定义:一个关系模式R(U)中,X和Y为属性集U上的子集,如果X→Y,且对与X的任意一个真子集Z来说,Z→Y都不成立。

这个完全函数依赖我们分俩个情况理解,1.X为单个属性值,这时候X→Y,那么这个关系必定为完全依赖关系。2.X为属性组,也就是你用他的子集无法推导出Y,必须用整个X才行。

举例:1.单个属性:学号→姓名,这个依赖关系必是完全函数依赖,因为X没真子集。

           2.属性组:(学号,课程号)→个人成绩,其真子集有俩:学号和课程编号,如果只知道其中一个,是推导不出来个人成绩的,必须合在一起整体使用,所以是完全函数依赖。

部分函数依赖

定义:一个关系模式R(U)中,X和Y为属性集U上的子集,如果X→Y,对与X的真子集Z来说,存在一个Z→Y,那么X→Y为部分函数依赖。

举例:(学号,课程号)→姓名,此时X为属性组(学号,课程号)其真子集有俩个:学号、课程号,我们通过学号可以直接得到学生的姓名,也就是学号→姓名,所以(学号,课程号)→姓名为部分函数依赖

传递函数依赖

定义:一个关系模式R(U)中,X、Y、Z为属性集U上的子集,如果X→Y,Y不能反推出X,且Y→Z,这时候通过X可以推出Z,即X→Z,我们把X→Z称为传递函数依赖。

举例:

学号所在系系主任
0112管理系王老师

学号→所在系,所在系→系主任,所以学号→系主任为传递函数依赖。

  • 39
    点赞
  • 186
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值