数据库原理-函数依赖
数据库原理-函数依赖
为什么要引入函数依赖?
函数依赖是数据库设计基础理论的一部分,它能够帮助我们定义属性之间的一部分联系,能够用来确定候选键,定义范式,从而评价关系模式设计的好坏。
函数依赖的定义
设R(U),U是R的属性集,X,Y是U的子集,对于X的每一个具体值,都有唯一的Y与之对应,则称X函数决定Y,或者Y函数依赖于X
函数依赖还要满足如下条件:
R的一切关系都要满足约束条件(即表格中的子表也要满足)
只能根据语义来确定函数依赖,没有形式上的定义。例如姓名$\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$就是该属性集的真子集,这与完全函数依赖的定义相矛盾)
因此候选键具有以下性质:
- 唯一确定性
- 最小性
- 存在性和不唯一性。每一个关系都有至少一个候选键,否则就会出现相同的实体
主键:其中一个候选键
主属性:包含在任何一个候选键中的属性
非主属性:不包含在任何一个候选键中的属性
常见的学号、班号、教师编号等都可以是相应表中的候选键,在选课表中,学生号和课程号这个全集就是唯一的候选键