范式:按关系模式所具有的数据依赖性质对关系模式的分类。也就是关系的规范化程度。
规范化:把一个低一级范式的关系模式通过模式分解转化为若干个高一级的关系模式的过程。
第一范式
- 定义:关系的每个分量必须是不可再分的数据项。记作R∈1NF。(每个属性必须是原子的)
- 注意:属性不可再分(不允许出现嵌套的属性定义)
属性下的值不可再分(不允许出现多个值)
这是对关系的最起码的要求,但远远不够。(满足1NF的关系称为规范关系)
第二范式
- 定义:若 R∈1NF,且每一非主属性都完全函数依赖于R的码,则称R是第二范式,记作R ∈2NF。
第三范式
- 定义:若 R∈2NF,并且R中不存在任何非主属性传递函数依赖于R的码,则称R∈3NF。
- 注意:若R<U, F>中U是全键,则一定有 R∈3NF。
若R<U, F>为二元关系,则一定有 R∈3NF。
Boyce-Codd范式(BCNF)
- 定义:若R∈1NF,且对任何非平凡的函数依赖X->Y,
X必包含码。则R∈ BCNF。 - 另一种等价的定义:
若 R∈1NF,并且R中不存
在任何属性传递、部分函数依赖于R的某个码,则称R∈ BCNF。
求闭包
求极小依赖集
无损连接判断算法
保持函数依赖判断
求关系模式所有候选码
- 根据候选码的相关定理和推论求解候选码
定理1 对于给定的关系模式R 及其函数依赖集F,若X(X∈R)是L 类属性,则X 必为R 的任一候选码的成员。
推论l 对于给定的关系模式R 及其函数依赖集F,若X(X∈R)是L 类属性,且X+包含了R 的全部属性,则X 必为R 的唯一候选码。
定理2 对于给定的关系模式R 及其函数依赖集F,若X(X∈R)是R 类属性,则X 不在任何候选码中。
定理3 设有关系模式R 及其函数依赖集F,如果X 是R 的N 类属性,则X 必包含在R 的任一候选码中。
推论2 对于给定的关系模式R 及其函数依赖集F,如果X 是R 的N 类和L 类组成的属性集,且X+包含了R 的有属性,则X 是R 的唯一候选码。
- 利用属性闭包进行候选码求解的算法
1、属性分类相关定义
对于给定的关系模式R(U,F),其属性分为4 类:
L 类(仅出现在F 的函数依赖左部的属性);
R 类(仅出现在F 的函数依赖右部的属性);
N 类(在F 的函数依赖左部和右部均未出现的属性);
LR 类(在F 的函数依赖左部和右部两部均出现的属性)。
2、算法描述
(1)将R 的所有属性分为L、R、LR 和N 四类,并令X 代表L、N 类,Y 代表LR 类。
(2)求X+。若X+包含了R 的全部属性,则即为R 的唯一候选码,转(5);否则,转(3)。
(3)在Y 中取一属性A,求(XA)+ ,若它包含了R 的全部属性,则是候选码,转(4);否则,调换一属性反复进行这一过程,直到试完所有Y 中的属性。
(4)如果已找出所有候选码,则转(5);否则在Y 中依次取2 个、3 个、…,求它们的属性闭包,若其闭包包含R 的全部属性,则是候选码。
(5)结束。
- 利用函数依赖图求解候选码
1、相关知识
定义 在有向图中,把关系模式的属性作为顶点,属性之间的函数依赖关系作为有向边,这样的有向图称为该关系模式的函数依赖图,即FDG(Function Depend Graph)。
在一个函数依赖图中,存在下列术语:
原始点:只有引出线而无引入线的结点,它表示对应L 类属性;
终结点:只有引入线而无引出线的结点,它表示对应R 类属性;
途中点:既有引入线又有引出线的结点,它表示对应LR 类属性;
孤立点:既无引入线又无引出线的结点,它表示对应N 类属性;
关键点:原始点和孤立点的统称;
关键属性:关键点对应的属性;
独立回路:不能被其它结点到达的回路。
2、 利用函数依赖图求解候选码的算法
左边为单属性的候选码求解算法描述
(1)求最小函数依赖集Fm;
(2)构造函数依赖图FDG;
(3)从图中找出关键属性集X;
(4)查看FDG 有无独立回路,若无则X 即为R 的唯一候选码,转(6),若有,则转(5);(5)从各独立回路中各取一结点对应的属性与X 组合成一候选码,并重复这一过程,取尽所有可能的组合,即为R 的全部候选码;
(6)结束。