在一个关系中R中,对于X存在唯一的Y与之对应,叫做Y函数依赖于X,或X函数确定Y,X→Y
在关系模式R(U)中,对于U的子集X和Y,
如果X→Y,但Y不属于X,则称X→Y是非平凡的函数依赖
若X→Y,但Y$\subseteq $X, 则称X→Y是平凡的函数依赖
例:在关系SC(sno, cno, grade)中
非平凡函数依赖:(sno, cno) → grade
平凡函数依赖:(sno, cno) → sno
(sno, cno) → cno
在() → ***
这个模式中,括号内的属性在决定右侧***
时,都用到了,就叫完全函数依赖,否则叫部分函数依赖
不存在表中表,属性是不可分割的数据项
存在的问题:
每个属性完全依赖于码,不存在对码的部分依赖
存在的问题:
可以一定程度上解决各种异常,但并不能完全消除异常和数据冗余
每个非主属性既不部分依赖于码,也不传递依赖于码
存在的问题:
仍不能完全消除异常和数据冗余
每个决定属性因数都包含码
实现了彻底的分离,已消除了插入和删除异常。
下表所表示的现实世界的情形,变成数据库的关系,就会形成多值依赖
用二维表表示后
闭包就是由一个属性直接或间接推导出的所有属性的集合,例如:
f={ a->b, b->c, a->d, e->f }
由a
可直接得到b
和d
,间接得到c
,则a
的闭包就是{ a, b, c, d }
。
例 设关系R(A, B, C, D, E, G)有函数依赖集F={AB→C, BC→AD,D→E, CG→B},求AB的闭包。
首先从AB出发,令X={A, B},由于函数依赖AB→C左边的所有属性都在X中,所以可以把右边的C添加到X中,这时X={A, B, C}
其次考虑函数依赖BC→AD,左边B,C均在X中,右边D不在X中,将其添加到X中,此时X={A, B, C, D}
再考虑函数依赖D→E,同理可将E添加到X中,此时X={A, B, C, D, E}。
上述方法再不能向X中添加属性,所以得到 A B + = { A , B , C , D , E } AB^{+}=\{A, B, C, D, E\} AB+={A,B,C,D,E}。
如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集。亦称为最小依赖集或最小覆盖。
(1) F中任一函数依赖的右部仅含有一个属性。
(2) F中不存在这样的函数依赖X→A,使得F与F-{X→A}等价。
(3) F中不存在这样的函数依赖X→A,X有真子集Z使得F-{X→A}∪{Z→A}与F等价。