文章目录
一、函数依赖
设R(U)是一个关系模式, U={A1, A2, …,An},XU,YU
如果对于R的任意可能的关系r,若t1 ,t2∈r,t1[X]= t2[X],则t1[Y]= t2[Y],那么就称在关系模式R上函数依赖 (functional dependency) X→Y成立
读作“X函数确定Y”,或“Y函数依赖于X”
X→Y对于关系模式R成立意味着:只要关系r是R的实例,则r中就不存在两个不同的元组,它们在属性集X的所有分量上一致,而在属性集Y的一个或多个分量上不一致
平凡的函数依赖:设X是任意属性集,如果YX,则有X→Y,并称该函数依赖X→Y是平凡的
平凡的函数反映“整体确定局部”这种一般常识,而不反映新的语义
平凡的函数依赖的两个极端例子是
X→∅和∅→∅
非平凡的函数依赖:如果Y是X的真子集,则X→Y是非平凡的函数依赖
二、函数依赖的推导
1.Armstrong公理
附加的推理规则
引理
码的形式化定义:
2.属性集的闭包
算法1 求属性集X闭包的算法
示例:
3.函数依赖集的等价和极小覆盖
算法2 求F的极小覆盖
示例:
三、关系模式的范式
1.范式与规范化概述
1NF (first normal form) 要求关系的所有属性值都是原子的
2NF和3NF都利用函数依赖定义
2NF不能解决多少实际问题
3NF是一种更高级的范式,3NF能够处理函数依赖发现的大部分冗余和异常,但仍然不能完全解决问题
从函数依赖的角度,BCNF是最高级的范式形式。也就说,如果关系模式中仍然存在冗余,函数依赖既不能发现它们,也不能消除它们
多值依赖可以看作函数依赖的推广,可以用来发现和处理更多的冗余和存储异常
借助于多值依赖,Fagin引进了第四范式(4NF),并且表明在同时考虑函数依赖和多值依赖时,4NF是最高级的范式形式
其实多值依赖也不能发现和处理冗余带来的所有的问题。这导致连接依赖和第五范式(5NF) 概念的提出
连接依赖在实践中很少遇到,因而不如函数依赖和多值依赖重要
2. 2NF、3NF和BCNF
1NF
2NF
3NF
例题:
3NF
3.函数依赖与范式
四、关系模式的分解
1.无损连接分解
算法3:检测分解的无损连接性
2.保持函数依赖的分解
—————————————————————————
算法4:检验分解的函数依赖保持性
(*考的概率低)
—————————————————————————
分解的两个期望性质
五、将关系模式分解为高级范式