Note04- 关系数据库设计
关系数据库设计的任务就是把概念数据库设计阶段产生的概念数据库模式变换为关系数据库模式
由 E-R 模型到关系模型
实体和属性的变换
- 普通实体集
- 为概念数据库模式中的每个普通实体集
建立一个关系 包含 的所有简单属性和 的符合属性的简单子属性 的码是 的主码
- 为概念数据库模式中的每个普通实体集
- 弱实体的变换。设
为实体集 的弱实体 - 建立一个与
对应的关系 的所有简单属性和复合属性的简单子属性映射为 的属性 的码也是 的属性 的主码由 的码和 的部分码组合而成 对应的关系的码是 的外码
- 建立一个与
- 多值属性的变换。设实体集
具有多值属性, 是 对应的关系 - 为
的每个多值属性 建立一个关系 ,用 表示 - 如果
是简单属性, 的属性为 与 的主码 - 如果
是复合属性, 包含 的简单子属性和 主码 关系中忽略属性
- 为
实体间联系的变换
- 1:1 联系
- 方法一:在
或 中增加有关信息来表示联系 - 方法二:建立一个单独的关系
,把 和 的主码作为主码加入 , 的简单属性和符合属性的简单子属性作为简单属性加入
- 方法一:在
- 1:n 联系。设
是从实体集 到实体集 的 1:N 联系, 和 是 和 对应的关系 - 方法一:由于
的每个实体至多与 的一个实体对应,因此用 表示 。将 的主码作为外码加入 , 的简单属性和复合属性的简单子属性作为简单属性加入 - 方法二:同 1: 1 的方法二
- 方法一:由于
- m:n 联系。设
是从实体集 到实体集 的 M:N 联系, 和 是 和 对应的关系 - 只能用 1:1 联系的方法二
关系模式规范化
初始关系模式不是逻辑设计的最终结果,其中某些关系模式可能存在由属性间的函数依赖引起的冗余问题、插入问题、更新问题和删除问题。
函数依赖
:::tip 定义
设
如果
如果
:::
我们还可以定义出完全依赖:
:::tip 定义
设
:::
传递依赖:
:::tip 定义
设
:::
超码、候选码和主码:
:::tip 定义
设
:::
函数的依赖的公理系统
:::tip 定义
设
:::
包含三条推理规则:
- 自反律。若
,则 为 所蕴含 - 增广律。若
为 所蕴含,且 ,则 为 所蕴含 - 传递律。若
及 为 所蕴含,则 为 所蕴含
由此又可导出三条规则:
- 合并规则。由
,有 - 伪传递规则。由
,有 - 分解规则。由
,由
由合并规则和分解规则可得引理:
:::info 引理
:::
闭包
给出闭包的定义
:::tip 定义
在关系模式
:::
如果
求闭包流程:
- 把
加入闭包中。 - 逐一扫描
的各个函数依赖,如果函数依赖的左部是当前闭包的子集,则把右部加入闭包 - 判断闭包是否为
,或者是否找不到未用过的函数依赖,如果是则停止,否则回到第 2 步
求解候选码
将属性分为四类:
- L 类:仅出现在 F 的函数依赖左部的属性
- R 类:仅出现在 F 的函数依赖右部的属性
- N 类:在 F 的函数依赖左右两边均未出现的属性
- LR 类:在 F 的函数依赖左右两边均出现的属性
显然,
求解极小函数依赖集
:::tip 定义
如果函数依赖集
中任一函数依赖的右部仅含有一个属性 中不存在这样的函数依赖 ,使得 与 等价 中不存在这样的函数依赖 , 有真子集 使得 与 等价
:::
算法:
- 逐一检查
中各函数依赖 ,若 , ,则用 来取代 - 循环地检查
中各函数依赖 ,令 ,若 , 则从 中去掉此函数依赖 - 循环地取出
中各函数依赖 ,设 ,逐一考查 ,若 ,则以 取代 。
范式
第一范式:
:::tip 定义
设
:::
在任何一个关系数据库系统中,第一范式都是一个最起码的要求。
第二范式:
:::tip 定义
设
:::
第三范式:
:::tip 定义
设
:::
将一个 2NF 关系分解为多个 3NF 的关系后,并不能完全消除关系模式中的各种异常情况和数据冗余。
BC 范式:
:::tip 定义
设关系模式
:::
如果一个关系数据库中的所有关系模式都属于 BCNF,那么在函数依赖范畴内,它已实现了模式的彻底分解,达到了最高的规范化程度,消除了插入异常和删除异常。
一旦数据已加载,不再进行插入、删除和更新的静态关系只需具有第一范式,否则称为动态范式,应该具有第三范式
规范化
基本步骤:
关系模式的分解
关系模式的分解必须满足:
- 分解的无损连接性
- 函数依赖保持性
将一个关系模式
无损连接性的判定
判断无损连接性,用表格法:
用这个例子:
-
构造初始表。第一行是所有属性,第一列是所有模式的属性集合。若属性属于模式中的属性,则填
,否则填 A B C D E ABC a1 a2 a3 b14 b15 CD b21 b22 a3 a4 b25 DE b31 b32 b33 a4 a5 -
对于
的每一个左部,看它在表中这一列有无相同的分量,如果有,就把右部对应的位置改为 A B C D E ABC a1 a2 a3 a4 a5 CD b21 b22 a3 a4 a5 DE b31 b32 b33 a4 a5 -
观察判定表,是否有一行全为 a,若是则得出分解具有无损连接性
如果分解为两个子模式,可以用如下定理简单判定无损连接性:
:::info 定理
设
:::
保持函数依赖性的判定
若
分解算法
3NF 分解算法 1(达到 3NF 且保持函数依赖的分解)
3NF 分解算法 2(达到 3NF 且具有无损连接和保持函数依赖的分解)
关系模式优化
关系模式的优化是根据需求分析和概念设计中定义的事务的特点,对初始关系进行分解,提高数据操作的效率和存储空间的利用率。
- 水平分解
- 把(基本)关系的元组分为若干子集合,定义每个子集合为一个子关系,以提高系统的效率。
- 垂直分解
性能估计
使用逻辑记录存取数、信息传输量和存储空间占用量等三个测度来估计逻辑数据库的性能