关系数据库设计
设计选择
- 更大的模式
- 冗余
- 插入限制
- 更小的模式
- 有的联系无法表示
合法实例
一个关系的满足所有这种现实世界约束的实例
超码
令r(R)是一个关系模式。R的子集
表达数据库一致性约束的方式
- 主码约束
- 函数依赖
- check约束
- 断言
- 触发器
依赖
函数依赖
令r(R)是一个关系模式,α,β∈R。给定r(R)的一个实例,我们说这个实例满足函数依赖α→β的条件是:对于r的实例中的所有元组对
- 如果在r(R)的每个合法实例中都满足函数依赖α→β,则函数依赖在模式r(R)上成立
- 如果函数依赖K→R,则K是
- 有些函数依赖称为平凡的,因为它们在所有关系中都满足。一般地,如果,β∈α,则形如α→β的函数依赖是平凡的
多值依赖
令r(R)为一关系模式,多值依赖α→→β在R上成立的条件是,在r(R)任意合法实例中,对于r中任意一对满足
- t_1[α]=t_2[α]=t_3[α]=t_4[α]
- t_1[β] = t_3[β]
- t_3[R – α–β] = t_2[R– α –β]
- t_2[β] = t_4[β]
- t_4[R – α–β] = t_1[R– α –β]
由多值依赖的定义,可以得到
- 若α→β,则α→→β
- 若α→→β,则α→→R−β−α
保持依赖
令F为
令F′=F1∪F2∪..Fn,如果F′+=F+,则分解为保持依赖的
闭包
Armstrong公理
- 自反律:如果β∈α,那么α→β
- 增补律:如果α→β,那么γα→γβ
- 传递律:如果α→β,并且β→γ,那么α→γ
推论
- 合并律:如果α→β并且α→γ,那么α→βγ
- 分解律:如果α→βγ,那么α→β并且α→γ
- 伪传递律:如果α→β并且γβ→δ,那么αγ→δ
函数依赖集的闭包
令F为一个函数依赖集,
属性集的闭包
将函数依赖集F下被
计算方法
- 初始α+=α
- 对于每一个函数依赖β→γ ,如果β∈α+,将γ加入α+
覆盖
无关属性
考虑函数依赖集F及
- 如果A∈α并且F逻辑蕴涵
- 令γ=α−A,计算F下
- 如果A∈β并且(F−{α→β})∪{α→(β−A)}逻辑蕴涵F,则
- 计算(F−{α→β})∪{α→(β−A)}下α+,如果α+包含A,则
正则覆盖
F的正则覆盖
- Fc中任何函数依赖都不含无关属性
- Fc中函数依赖的左半部都是唯一的,即Fc不存在两个依赖α1→β1和α2→β2,满足α1=α2
计算方法
- 使用合并律将α1→β1和α1→β2替换成α1→β1β2
- 将含有无关属性的函数依赖删去
最小覆盖
如果函数依赖集F满足下列条件,则称F为最小函数依赖集或最小覆盖
- F中的任何一个函数依赖的右部仅含有一个属性;
- F中不存在这样一个函数依赖X→A,使得F与
- F中不存在这样一个函数依赖X→A,X有真子集
求解最小函数依赖集分三步
- 将
F 中的所有依赖右边化为单一元素- 去掉F中的所有依赖左边的冗余属性
- 去掉
F 中所有冗余依赖关系
分解
- 无损分解:令R1和R2为R的分解,如果用
r(R1) 和r(R2)代替r(R)时没有信息损失,即把r投影到R1 和R2上,然后计算投影结果的自然连接,仍然得到一模一样的r - 有损分解
分解的目标
- 确定一个偏序关系
R 是不是好的形式 - 如果不是,把它分解为关系集{R1,R2,…,Rn},每一个Ri都是好的形式,并且分解是无损的
- 理论基础:函数依赖,多值依赖
第一范式
如果R的所有属性的域都是原子的
- 原因
- 非原子会使存储复杂,数据冗余BCNF范式
对F+中所有形如α→β的函数依赖,下面至少有一项成立
- α→β是平凡的函数依赖(即β∈α)
- α是模式R的一个超码设
R 不属于BCNF的一个模式,则存在至少一个非平凡的函数依赖α→β,其中α不是R的超码,则可以用α∪β 和R−(β−α)取代R
无损分解,可能不是保持依赖的第二范式
如果关系
R 属于NF,且每一个非主码完全函数依赖于码,则关系R$属于第二范式第三范式
对F+中所有形如α→β的函数依赖,下面至少有一项成立
- α→β是平凡的函数依赖(即β∈α)
-α是模式R的一个超码
-β−α 中的每个属性A都包含于R 的任意一个候选码中第三范式是BCNF的最小放宽
无损分解,保持依赖,可能用空值表示数据联系第四范式
D是函数依赖和多值依赖集,对所有
D+ 中所有形如α→→β的多值依赖,至少以下一个成立
- α→→β是一个平凡的多值依赖
- α是R的一个超码各种范式之间的联系
5NF⊂4NF⊂BCNF⊂3NF⊂2NF⊂1NF
常见分解
- 无损分解为BCNF模式集
- 初始为{R}
- 对于F中每一个非平凡函数依赖
X→Y ,X不包含超码,就把R 分解为{R−Y,XY}
- 无损分解为3NF模式集
- 无损分解为BCNF模式集

被折叠的 条评论
为什么被折叠?



