规范化
规范化是将属性分配给一个实体的过程,用以减少数据冗余和减少更新异常。这个过程实际上就是将一个低一级范式的关系模式,通过模式分解转换为若干个高一级范式的关系模式的集合的过程
数据库设计中的异常
- 数据冗余
- 修改复杂:
- 更改表所对应的某个实体实例或者关系实例的单个属性时,需要进行多次更新
- 插入异常:
- 因缺少某些属性的值,导致无法插入某个实体实例
- 删除异常:
- 删除表的某一个实体实例或关系实例时,导致丢失另一个不同实体实例或关系实例的信息
例子:
上述关系中存在:
- 借多本书时,学生信息存在冗余
- 学生转系时,修改复杂
- 新生注册但是未借书,插入异常
- 还了所有的书,删除异常
函数依赖
- 设 $X$, $Y$ 是关系 $R$ 的两个属性集合,当任何时刻 $R$ 中的任意两个元组中的 $X$ 属性值相同时,则它们的 $Y$ 属性值也相同,则称 $X$ 函数决定 $Y$ ,或 $Y$ 函数依赖于 $X$
- 函数依赖与属性间的关系:
- 若 $X$, $Y$ 是 $1-1$ 关系:
- 则 $X \rightarrow Y$,且 $Y \rightarrow X$
- 若 $X, Y$ 是 $m-1$ 关系:
- 则 $X \rightarrow Y$,但 $Y \nrightarrow X$
- 若 $X, Y$ 是 $m-n$ 关系:
- 则不存在函数依赖
- 若 $X$, $Y$ 是 $1-1$ 关系:
- 非平凡函数依赖:$X \rightarrow Y$ 并且 $Y \nsubseteq X$
- 平凡函数依赖:$X \rightarrow Y$ 并且 $Y \subseteq X$
完全函数依赖 $(full \; dependency)$
- 如果 $X \rightarrow Y$,并且对于 $X$ 的任何真子集 $X’$,都有 $X’ \nrightarrow Y$
- 记作 $X \stackrel{f}{\rightarrow} Y$
- 若 $X$ 为单属性,则一定是完全函数依赖
部分函数依赖 $(partial \; dependency)$
- 如果 $X \rightarrow Y$,并且存在 $X$ 的真子集 $X’$,使得 $X’ \rightarrow Y$
- 记作 $X \stackrel{p}{\rightarrow} Y$
- 若 $X$ 为多属性,则取其真子集,检查是否能够决定右部属性
传递函数依赖 $(transitive \; dependency)$
- 如果 $X \rightarrow Y$,$Y \nsubseteq X$,$Y \nrightarrow X$,且 $Y \rightarrow Z$
- 记作 $X \stackrel{t}{\rightarrow} Z$
函数依赖与候选键
- 若 $X \stackrel{f}{\rightarrow} U$,则 $X$ 称为 $R$ 的候选键
- $U$ 代表关系 $R$ 的所有属性
- 主属性:包含在任何一个候选码中的属性
- 非主属性:不包含在任何一个候选码中的属性
- 全码:整个属性组为码