本章理论性较强,晦涩难懂部分本人已做简单叙述,如有理解不到位之处,还请指出,谢谢
一.数据库规范性设计
为了避免数据库一致性问题,因此需要进行数据库规范性设计。需要满足三大理论:
- 数据依赖理论
- 关系范式理论
- 模式分解理论
二.函数依赖
函数依赖
定义:设是属性集合上的一个关系模式, 是 上两个子集,若的任意一个可能的关系,中不可能有两个元组满足在中属性值相等而在中属性值不等,则称函数决定,或函数依赖于X,记作
再举两个抽象的例子:
函数依赖的特性:
- 对,但 ,则称 为非平凡的函数依赖
- 对,任意两个元组,若上值相等,则上值必然相等,称X为决定因素
完全函数依赖与部分函数依赖
- 在中,若并且对的任何真子集都有,则称对完全函数依赖,记作
- 否则称对部分函数依赖,记作
举例:
传递函数依赖
定义:在中,若,且,,, 不能决定,则称传递函数依赖于。
候选键
定义:设为的属性或属性组合,若,则称为上的候选键
说明:
- 可任选一候选键作为R的主键
- 包含再任一候选键帐的属性称主属性,其他属性称非主属性
- 若K是R的一个候选键,KS,则称S为R一个超键
外键
定义:若中的属性或属性组合并非的候选键,但却是另一关系的候选键,则称X为R的外来键,简称外键。
逻辑蕴含
定义:设是关系模式中的一个函数依赖集合,是R的属性子集,如果从中的函数依赖能够推导出,则称是的逻辑蕴含,记作
这里简单说明下这个定义,关系模 式可以抽象成一个表,表示该表中所有属性集合,是一个函数依赖集合(比如集合内定义了完全函数依赖,传递函数依赖等),是表中的某两个属性或属性组,根据集合中定义的关系可以推导出,则称是的逻辑蕴含。比如说如果A,那么B(参照离散数学)
闭包
被逻辑蕴含的所有函数依赖集合称为的闭包,记作
若,则说是一个函数依赖完备集
三.函数依赖的公理和定理
Armstrong公理:
设是属性集上的一个关系模式,为的一组函数依赖,记为,则有:
- 自反律:若,则被逻辑蕴含(表明了一个属性组可以决定它自身的每一个属性)
- 增广律:若,且,则被逻辑蕴含(表明了一个函数依赖,两边再加上属性,函数依赖依旧成立)
- 传递律:若,且,则被逻辑蕴含
公理的证明:
由Armstrong公理推导出的定理:
- 合并律:若且,则
- 伪传递律:若且,则
- 分解律:若且,则
定理的证明:
引理:如果是属性,则当且仅当对每个有
属性集闭包:
定义:对,,,令用Armstrong三个公理可从导出,称为关于的属性闭包
简单地说明一下这个定义的含义:对于一个关系,可以抽象成一个表,表示这个表中所有的属性,是定义在表上的函数蕴含集合,是表中部分属性组构成的,则的属性集闭包就表示,由Armstrong公理在函数蕴含集合上的运用可以推出决定了的某些属性,这些属性的集合就是。即属性闭包是指所有由X属性(集)决定的属性的集合
由此定义推出重要定理:可从由Armstrong Axiom导出,当且仅当
定理:有了属性集闭包则可以证明Armstrong Axiom公理是有效的(由出发根据Armstrong公理推导出的每一个函数依赖一定在)和完备性(被逻辑蕴含的所有函数依赖都能由公理在的基础上推出)
覆盖
定义:对上的两个函数依赖集合和,如果,则称覆盖,或覆盖
引理:
属性闭包计算算法:
以示例简单说明下算法如何进行:
首先,由算法1,。由算法2中,与,这时候我们扫描集合中的依赖关系,其中左边部分要为,所以选择,,因此,即,由算法3,所以,但此时根据算法4不满足条件,再返回到算法2步骤,此时扫描集合中左边部分是任意组合的子集,找到与,得出,所以,不满足条件5(其实这时已经属于全部集合了,所以可以终止),再根据算法2,找到左边部分是的组合,现在只剩下了,所以无法找到或者说,因此,循环中止,此时得到了结果
此算法的证明不再详述。
由上述的算法得到引理:
每个函数依赖集可以被一个其右端至多由一个属性的函数依赖集覆盖。
这个引理的意思表示,假如,这里都有一个属性或多个属性构成,把拆成一个一个属性,那么函数依赖集就包含了决定了那些一个一个属性的集合。
最小覆盖
若满足一下条件,则称为最小覆盖:
- 中的每个函数依赖的右部是单个属性
- 对任何,就有不等价于(这就表示了不可以去掉,不确切的类比可以认为这个集合不能去掉)
- 对任何,,(这里比上面多了一个,这其实就表明在原有集合不能去掉的基础之上,又加上了一个限制,就是集合中没有多余的元素)
由此得到定理:每个函数依赖集都有等价的最小覆盖