数据库原理-函数依赖

数据库原理-函数依赖

为什么要引入函数依赖?

函数依赖是数据库设计基础理论的一部分,它能够帮助我们定义属性之间的一部分联系,能够用来确定候选键,定义范式,从而评价关系模式设计的好坏。

函数依赖的定义

设R(U),U是R的属性集,X,Y是U的子集,对于X的每一个具体值,都有唯一的Y与之对应,则称X函数决定Y,或者Y函数依赖于X

函数依赖还要满足如下条件:

  1. R的一切关系都要满足约束条件(即表格中的子表也要满足)

  2. 只能根据语义来确定函数依赖,没有形式上的定义。例如姓名$\to$ 班级 依赖下,只有在没有同名的前提下才能够成立

函数依赖大概能够理解为,每个X只能 有/对应 一个Y,它反映了表中属性之间的决定关系

以学校中的关系为例子:

存在关系S(sno(学号), sname(姓名), class(班级), cno(课程号), tno(教师号), tname(教师姓名), tage(教师年龄), address(教师地址), grade(成绩))

则以下函数依赖是成立的

$sno \to sname$

$sno \to class$

$tno \to tname$

$tno \to tage$

完全函数依赖

在$R(U)$中,如果$X \to Y$, 并且对于$X$的每一个真子集$X’$,都有$X’ \nrightarrow Y$, 则称$Y$完全函数依赖于$X$,记作$X \overset{f}{\to} Y$。否则,$Y$部分函数依赖于$X$,记作$X \overset{P}{\to} Y$。

举个例子:

$(sno, cno) \to grade$ 是一个完全函数依赖,因为 $sno \nrightarrow grade$, $ cno \nrightarrow grade$

传递函数依赖

设$X,Y,Z$为$U$的不同子集,如果$X \rightarrow Y, Y \nrightarrow X, Y \rightarrow Z$, 则必有$X \to Z$,则称$Z$传递函数依赖于$X$, 记作$X \overset{t}{\to} Z$。

用函数依赖定义候选键

候选键:唯一标识实体又没有多余属性的属性集

定义:设$X$为$R<U, F>$中的属性或者属性集,若$X \overset{f}{\to} U$,则称$X$为$R$的候选键

从定义可以看出,$X$能够唯一确定$R$的属性全集(即确定$R$), 又因为是完全函数依赖,因此$X$是最小的属性集(如果有比$X$大的属性集,则$X$就是该属性集的真子集,这与完全函数依赖的定义相矛盾)

因此候选键具有以下性质:

  1. 唯一确定性
  2. 最小性
  3. 存在性和不唯一性。每一个关系都有至少一个候选键,否则就会出现相同的实体

主键:其中一个候选键

主属性:包含在任何一个候选键中的属性

非主属性:不包含在任何一个候选键中的属性

常见的学号、班号、教师编号等都可以是相应表中的候选键,在选课表中,学生号和课程号这个全集就是唯一的候选键


数据库原理-函数依赖
http://example.com/2023/01/10/数据库原理-函数依赖/
作者
Chen Shuwen
发布于
2023年1月10日
许可协议