写在前面
前面一些文章介绍了数据关系数据库中如何进行基本算数运算关系和域运算,但作为一个数据库的designer,在进行数据库设计时必须要了解如何合理、规范、简洁的设计一个数据库,这些是数据模式规范化的内容,一个好的数据库模式是数据冗余尽可能少的模式,也很难发生各种异常。而想要做到浙西就应该遵循数据库设计理论:
- 数据依赖理论
- 关系范式理论
- 模式分解理论
这篇主要介绍数据依赖理论
一、函数依赖
好的数据库模式是不会发生插入异常、删除异常、更新异常,同时数据冗余尽可能少的模式。产生不好模式的根本原因是数据之间存在着某些数据依赖。解决方法是通过分解关系来消除其中不合适的数据依赖。
1.什么是函数依赖

特别值得注意的是,如果属性集X中不存在两个取值相同的元组集合,则Y必定依赖于函数X,且函数X的属性集为超键。
简单来讲,在实际中的函数依赖关系其实就是当a属性取相同值时,b属性值也必相同且为定值,那就可以说a->b;而当a取相同值,b的值不一定一致,那么则不能说a决定b,即b不依赖于a。
2.函数依赖的特性

3.部分函数依赖和完全函数依赖
定义:若关系R(U)中,X->Y,且对于X的任意一个真子集X‘,X’不能->Y,那么说明Y完全依赖于X,否则,称为Y部分依赖于X。
例:

4.传递函数依赖
定义:
5.候选键
具有唯一标识特性的一个或一组属性称为该关系的关系键。特点:具有唯一性、具有最小复性 (非冗余性)、有效性(任何一个属性不允许为空)。
在第一篇《关系的数据结构》中提到过候选键中所有的属性都是主属性,那么不包含在候选建中的任一属性都是非主属性。
超键:超键其实就是包含候选键的属性集合,那么由定义来看,超键是没有最小性的。
外来键:

6.逻辑蕴含
{X→Y,Y→Z} ⊨ X→Z
即对于关系模式上的函数依赖集合F,只要X→Y是一个函数依赖,那么必然可以推导认为F逻辑蕴涵X→Y。
7.闭包
由函数依赖集合F所逻辑蕴涵的全部函数依赖所构成的集合称之为F的闭包。
F+={ X→Y|F|=X→Y}
有关于闭包有一个很重要的思想:小集合,大闭包
(这里就用到离散数学的知识了hhhhh)
二、函数依赖的公理和定理
前面介绍了一些函数依赖的概念,也知道了由一些给定的函数依赖可以推出一些隐含的函数依赖,那么如何推导呢,就用到了Armstrong公理
1.函数依赖的Armstrong公理

关于这个定理内容,用简单直白的话来讲是这样理解的
自反律:说明了一个属性组能够决定他自身的每一个属性
增广律:说明了一个函数依赖两端各加上相同的属性,该函数依赖仍然成立,这里的XZ应该是表示xUz
传递律:传递律我们一般所理解的就一致了
⭐由此也可以看出公理的作用是由已知的函数依赖推导出隐含的函数依赖
由A1~A3易推出下面的三条推理规则也是正确的:
- 合并规则:若X→Y,X→Z成立,则X→YZ成立;
- 伪传递规则:若X→Y,WY→Z成立,则WX→Z成立;
- 分解规则:若X→Y,且Z 属于 Y,则有X→Z成立;
2.属性集闭包
前面闭包是函数依赖集合的闭包,而此处是属性集合的闭包

属性闭包集的概念主要是证明一个函数依赖是不是属于一个函数依赖集,是不是被函数依赖集蕴含。
3.函数依赖的最小覆盖

由定义可以看出覆盖其实是相互覆盖的关系,但需要注意的是等价不等于相等,有可能是两个不同的函数依赖集合,分别逻辑蕴含推理出的函数依赖集合(闭包)是相等的。
最小函数依赖集:
1.右部均为单属性
2.左部没有多余属性
3.F中没有多余的函数依赖
这一讲主要讲了数据依赖的概念,从函数依赖到闭包的概念得到函数依赖集和覆盖,这节概念较多,涉及一些离散数学的知识,我觉得较难理解emmmm