关系数据理论——函数依赖与码的定义
函数依赖理论
规范化理论研究的是关系模式中各属性间的依赖关系及对其概念性模式性能的影响,它提供了判断关系模式优劣的理论标准,能帮助数据库设计人员预测可能出现的问题。
关系模式可能存在数据冗余、更新异常、插入异常、删除异常等问题,要解决这些问题就需要分析数据依赖。所谓数据依赖,就是关系模式下任何一个关系所必须满足的一种约束条件,比如对于一个特定的学生学号,只能给出(映射到)一个特定的专业(当然我们默认一个学生不是双专业的)。
函数依赖
设 R(U) 是属性集 U 上的关系模式,X、Y 是 U 的子集。如果对于 X 的每个值,有唯一的 Y 值与之对应,就说 X 函数确定 Y 或者 Y 函数依赖于 X ,记为 \(X \rightarrow Y\)。
| 学号(SNO) | 姓名(SNAME) | 专业(SDEPT) |
|---|---|---|
| 0001 | 张三 | 计算机 |
| 0002 | 王二 | 自动化 |
| 0003 | 李梅 | 电子信息 |
如上图,显然有 \(SNO \rightarrow SDEPT\)
设计者对现实世界进行强制规定时,比如不允许同名人的出现,那么我们的 \(SNO \rightarrow SNAME\) 也成立。
函数依赖很像一个数学上的函数关系 \(y = f(x)\) ,给出一个 \(x\),我们可以确定唯一的一个 \(y\)。
另外,给出几个术语和记号:
决定因素/决定属性组:上文提到的X。
一一对应关系:\(X\rightarrow Y且Y\rightarrow X \Leftrightarrow X \leftarrow \rightarrow Y\)
Y不函数依赖于X:\(X \nrightarrow Y\)
以及下面的:
非平凡的函数依赖
此即非平凡的函数依赖。
举个例子:(张三,男)\(\rightarrow\) (张三,计算机系)
平凡的函数依赖
此即平凡的函数依赖。
举个例子:(张三,男)\(\rightarrow\) (张三),更复杂的数据确定自己的一部分,不反映新的语义,这在每个关系模式中都成立。
完全函数依赖
此即完全函数依赖,叫做Y对X完全函数依赖:
F是Full的意思。
简单理解就是X是当前对Y的最小的决定因素,再减少X的信息量就推不出唯一的Y了。
部分函数依赖
记作
P是Partial的意思。
简单理解就是X中有些信息未必参与确定Y,删去也无妨。
传递函数依赖
反映了函数依赖的传递性。
当然这是有限制的,如下:
① \(Y \nsubseteq X , Z \nsubseteq Y\)
② \(Y \nrightarrow X\):X不函数依赖于Y
(如果\(Y \to X\),那么就有\(X \leftarrow \rightarrow Y\),实际变成了$X \mathop{\rightarrow}\limits^{直接} Z $,为直接函数依赖)
举个例子:学号 \(\to\) 系 \(\to\) 系主任
码(键/键码/关键字)
我们用函数依赖的概念来定义码。
候选码(Candidate Key)
设 \(K\) 为 \(R<U,F>\)中的属性或属性组合,若\(K\mathop{\rightarrow}\limits^{F} U\),则\(K\)为\(R\)的候选码。
我们再引申出一下概念:
① 另外,如果U只是普通地函数依赖于K,即\(K \to U\),则K为R的超码(Surpkey)。
候选码 \(\subseteq\) 超码
② 若候选码多于一个,则选定其中一个为主码(primary key)。
③ 包含在任何一个候选码中的属性叫主属性(prime attribute);不包含在任何候选码中的属性叫做非主属性(nonprime attribute)。
④ 最简单的情况是:单个属性是码,与之对应最复杂的是:整个属性组是码,即全码(all-key)。
举个例子:
假设关系模式\(R(\underline P,\underline W,\underline A)\)中,\(P\)表示演奏者,\(W\)表示作品,\(A\)表示听众。我们说一个演奏者可以演奏多个作品,某个作品可以被多个演奏者演奏,听众也可以欣赏不同演奏者的不同作品,那么这个关系的码为(\(P,W,A\)),即all-key。
外码(Foreign Key)
\(R\)中属性或属性组\(X\)并非\(R\)的码,但\(X\)是另一个关系模式的码,则称\(X\)是\(R\)的外部码,即外码。
比如 \(SC(\underline{Sno},\underline{Cno},Grade)\) 中,\(Sno\)不是码,但\(Sno\)是关系模式\(S(\underline{Sno},Sdept,Sage)\)的码,则称\(Sno\)是\(SC\)的外码。
了解了函数依赖和码的函数依赖上的表示,我们可以更好地学习规范化中范式的知识(后续更新)。

浙公网安备 33010602011771号