08关系数据库的设计
来源:互联网 发布:组态王软件代理 编辑:程序博客网 时间:2024/06/07 22:26
关系数据库设计
设计选择
- 更大的模式
- 冗余
- 插入限制
- 更小的模式
- 有的联系无法表示
合法实例
一个关系的满足所有这种现实世界约束的实例
超码
令
表达数据库一致性约束的方式
- 主码约束
- 函数依赖
- check约束
- 断言
- 触发器
依赖
函数依赖
令
- 如果在
- 如果函数依赖
- 有些函数依赖称为平凡的,因为它们在所有关系中都满足。一般地,如果,
多值依赖
令
- t_1[
- t_1[
- t_3[R –
- t_2[
- t_4[R –
由多值依赖的定义,可以得到
- 若
- 若
保持依赖
令
令
闭包
Armstrong公理
- 自反律:如果
β∈α ,那么α→β - 增补律:如果
α→β ,那么γα→γβ - 传递律:如果
α→β ,并且β→γ ,那么α→γ
推论
- 合并律:如果
α→β 并且α→γ ,那么α→βγ - 分解律:如果
α→βγ ,那么α→β 并且α→γ - 伪传递律:如果
α→β 并且γβ→δ ,那么αγ→δ
函数依赖集的闭包
令
属性集的闭包
将函数依赖集
计算方法
- 初始
- 对于每一个函数依赖
覆盖
无关属性
考虑函数依赖集
- 如果
- 令
- 如果
- 计算
正则覆盖
-
-
计算方法
- 使用合并律将
α1→β1 和α1→β2 替换成α1→β1β2 - 将含有无关属性的函数依赖删去
最小覆盖
如果函数依赖集F满足下列条件,则称F为最小函数依赖集或最小覆盖
- F中的任何一个函数依赖的右部仅含有一个属性;
- F中不存在这样一个函数依赖
- F中不存在这样一个函数依赖
求解最小函数依赖集分三步
- 将
F 中的所有依赖右边化为单一元素 - 去掉
F 中的所有依赖左边的冗余属性 - 去掉
F 中所有冗余依赖关系
分解
- 无损分解:令
R1 和R2 为R 的分解,如果用r(R1) 和r(R2) 代替r(R) 时没有信息损失,即把r 投影到R1 和R2 上,然后计算投影结果的自然连接,仍然得到一模一样的r - 有损分解
分解的目标
- 确定一个偏序关系
R 是不是好的形式 - 如果不是,把它分解为关系集
{R1,R2,…,Rn} ,每一个Ri 都是好的形式,并且分解是无损的 - 理论基础:函数依赖,多值依赖
第一范式
如果R的所有属性的域都是原子的
- 原因
- 非原子会使存储复杂,数据冗余
BCNF范式
对
-
-
设
无损分解,可能不是保持依赖的
第二范式
如果关系
第三范式
对
-
-
-
第三范式是BCNF的最小放宽
无损分解,保持依赖,可能用空值表示数据联系
第四范式
-
-
各种范式之间的联系
常见分解
- 无损分解为BCNF模式集
- 初始为
{R} - 对于
F 中每一个非平凡函数依赖X→Y ,X 不包含超码,就把R 分解为{R−Y,XY}
- 初始为
- 无损分解为3NF模式集
- 08关系数据库的设计
- 关系型数据库的设计
- 关系数据库的设计范式
- 数据库——关系数据库的设计
- 面向对象的关系数据库设计
- 面向对象的关系数据库设计
- 面向对象的关系数据库设计
- 关系数据库的几种设计范式
- 关系数据库的模式设计(转贴)
- 关系数据库的几种设计范式
- 关系数据库的几种设计范式
- 关系数据库的几种设计范式
- 面向对象的关系数据库设计
- 数据库设计的5种常见关系
- 面向对象的关系数据库设计
- 数据库设计的5种常见关系
- 数据库设计的5种常见关系
- 关系数据库的规范化设计内容提要
- 徐悲鸿赠画马车夫
- 06形式化关系查询语言
- 动态规划-波动数列
- 07数据库设计
- [LeetCode]496. Next Greater Element I(下一个更大的元素 1)
- 08关系数据库的设计
- 把BST转换为双向链表
- 10存储和文件结构
- 10存储和文件结构
- 11索引与散列
- OC:对象、类、元类
- 14事务
- Java 加密与解密
- [LeetCode]412. Fizz Buzz