关系数据理论
理论背景
一个关系模式应当是一个五元组
数据依赖是一个关系内部属性与属性之间的一种约束,其中最重要的是:
- 函数依赖
- 多值依赖
在只考虑函数依赖这一数据依赖中,可以得到这样的关系模式
但是这样的关系模式存在一下一些问题:
- 数据冗余
- 更新异常
- 插入异常
- 删除异常
规范化
函数依赖
定义:设
- 非平凡函数依赖:若
,但 ,则称 是非平凡函数依赖。若不是特别声明,总是讨论非平凡函数依赖。 - 平凡函数依赖:若
,但 ,则称 是非平凡函数依赖。 - 决定因素:若
,则 称为这个函数依赖的决定属性组,也成为决定因素。 - 完全函数依赖:在
中,如果 ,并且对于 的任何一个真子集 ,都有 ,则称 对 完全函数依赖。记作 。 - 部分函数依赖:若
,但 不完全函数依赖于 ,则称 对 部分函数依赖。 - 传递函数依赖:在
中,如果 则称 Z 对 X 传递函数依赖,记为 。 - 直接函数依赖:若
,则 对 是直接函数依赖,记为 。
码
下面以函数依赖的概念来定义码:
- 候选码:设
为 中的属性或属性组合,若 ,则 为 的候选码。 - 超码:若
,则 为 的超码。候选码是最小的超码。 - 主码:若候选码多于一个,则选定其中一个为主码。
- 主属性:包含在任何一个候选码中的属性称为主属性。
- 非主属性:不包含在任何一个候选码中的属性称为非主属性或非码属性。
- 全码:整个属性组是码,称为全码。
- 外码:关系模式
中属性或属性组 并非 的码,但 是另一个关系模式的码,则称 是 的外部码,也称外码。
范式
关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式。
对于各种范式之间的关系有:
一个低一级范式的关系模式通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。
第一范式(1NF): 对于一个二维表,关系模式的每一个分量必须是不可分的数据项,满足这个条件的关系模式就属于第一范式。
学号 | 姓名 | 系名 | 系主任 | 课名 | 分数 |
---|---|---|---|---|---|
2024001 | 小明 | IS | 张明 | C1 | 95 |
2024001 | 小明 | IS | 张明 | C2 | 90 |
2024001 | 小明 | IS | 张明 | C3 | 88 |
2024002 | 小红 | IT | 张暗 | C1 | 70 |
2024002 | 小红 | IT | 张暗 | C2 | 78 |
但仅仅符合
- 每一个学生的学号、姓名、系名、系主任等数据重复多次——数据冗余过大。
- 假如新建一个系,但是暂时没有招收任何一名学生,那么将无法将系名和系主任的数据单独地添加到数据表中去——插入异常。
- 假如将某个系中所有学生相关地记录都删除,所有地系与系主任地数据也就一并消失了——删除异常。
- 假如小明转到计算机科学系,为保证数据一致性,需要修改小明所有三条记录中的系名与系主任的数据——修改异常。
定义:若
也就是说,
那么在上表中,判断是否符合
找出数据表中所有的码
- 查看所有每一个单属性,当它的值确定了,剩下的所有属性值是否能确定。
- 查看所有包含两个属性的属性组,当它的值确定了,剩下的所有属性值是否能确定。
- ……
- 查看包含所有属性的属性组,当它的值确定了,剩下的所有属性值是否能确定。
得到上表的码为(学号,课名)
根据码,找出所有主属性——主属性有两个,学号与课名。
除去所有主属性,剩下的就是非主属性——非主属性有系名、系主任、姓名和分数。
查看是否存在非主属性对码的部分函数依赖
- 对于
,有 ,存在非主属性 对码 的部分函数依赖。 - 对于
,有 ,存在非主属性 对码 的部分函数依赖。 - 对于
,有 ,存在非主属性 对码 的部分函数依赖。
- 对于
所以上表中,存在非主属性对码的部分函数依赖,所以只符合
为了符合
模式分解以后的数据表为:
学号 | 课名 | 分数 |
---|---|---|
2024001 | C1 | 95 |
2024001 | C2 | 90 |
2024001 | C3 | 88 |
2024002 | C1 | 70 |
2024002 | C2 | 78 |
学号 | 姓名 | 系名 | 系主任 |
---|---|---|---|
2024001 | 小明 | IS | 张明 |
2024002 | 小红 | IT | 张暗 |
模式分解以后,是否还存在问题:
- 小明转到计算机科学系,只需修改李明对应的系的值就可以了——修改异常有改进。
- 学生的姓名、系名、系主任等不像之前重复多次——数据冗余有改进。
- 删除某个系全部学生记录,该系信息仍就丢失——删除异常无改进。
- 插入一个没有学生的新系,学生表的码为学号,不能为空,插入失败——插入异常无改进。
定义:设关系模式
也就是说,
在上表中,经过模式分解,分为了两个表,一个学生表,一个选课表。
对于选课表,主码为
对于学生表,主码为
为满足
模式分解以后的数据表为:
学号 | 课名 | 分数 |
---|---|---|
2024001 | C1 | 95 |
2024001 | C2 | 90 |
2024001 | C3 | 88 |
2024002 | C1 | 70 |
2024002 | C2 | 78 |
学号 | 姓名 | 系主任 |
---|---|---|
2024001 | 小明 | 张明 |
2024002 | 小红 | 张明 |
系名 | 系主任 |
---|---|
IS | 张明 |
IT | 张明 |
模式分解以后,是否还存在问题:
- 小明转到计算机科学系,只需修改李明对应的系的值就可以了——修改异常无影响。
- 数据重复更少——数据冗余有改进。
- 删除某个系全部学生记录,该系信息不会丢失——删除异常有改进。
- 插入一个没有学生的新系,学生表和系表是独立的两张表,不影响——插入异常有改进。
此时,符合
定义:关系模式
由
- 所有非主属性对每一个码都是完全函数依赖。
- 所有主属性对每一个不包含它的码也是完全函数依赖。
- 没有任何属性完全函数依赖于非码的任何一组属性。
由于
下面用一个例子来解释
- 若某公司有若干仓库;
- 每个仓库只能有一名管理员,一名管理员只能在一个仓库中工作;
- 一个仓库可以存放多种物品,一个物品也可以存放在不同的仓库中,每个物品在每个仓库中都有对应的数量。
那么该关系模式为:
已知的函数依赖集为:
码:
主属性:仓库名、管理员、物品名
非主属性:数量
仓库名 | 管理员 | 物品名 | 数量 |
---|---|---|---|
上海仓 | 张三 | 15S | 30 |
上海仓 | 张三 | Air | 40 |
北京仓 | 李四 | 15S | 50 |
北京仓 | 李四 | Mini | 60 |
该关系模式不存在非主属性对码的部分函数依赖和传递函数依赖,因此属于
试进行以下几种操作:
- 新增一个仓库,但未存放任何物品,是否可以为该仓库指派管理员——不可以,因为物品名也是主属性,根据实体完整性,主属性不能为空。
- 某仓库被清空后,需要删除所有与这个仓库相关的物品存放记录——会使得仓库本身和管理员的信息也被随之删除。
- 如果仓库更换管理员——这个仓库有几条物品存放记录,就要修改多少次管理员信息。
因此,即使关系模式满足
因为存在着主属性对码的部分函数依赖与传递函数依赖(本例中主属性仓库名对码
解决办法就是在
这样插入异常、修改异常与删除异常的问题就解决了。
所以
注:参考知乎
多值依赖
定义:设
例:学校中某一门课程由多个教授讲授,它们使用相同的一套参考书。每个教师可以讲授多门课程,每种参考书可以供多门课程使用。可以用一个非规范化的关系来表示教室 T、课程 C 和参考书 B 之间的关系。
课程 C | 教师 T | 参考书 B |
---|---|---|
物理 | ||
数学 | ||
计算机数学 | ||
在关系模式
平凡的多值依赖:若
非平凡的多值依赖:反之就是非平凡多值依赖。
多值依赖性质:
- 多值依赖具有对称性:若
,则 ,其中 。 - 多值依赖具有传递性:若
, ,则 。 - 函数依赖可以看作是多值依赖的特殊情况:若
,则 。
定义:关系模式
规范化小结
关系模式的规范化过程是通过对关系模式的分解来实现的,即把低一级的关系模式分解为若干个高一级的关系模式。
*数据依赖的公理系统
定义 1:对于满足一组函数依赖
Armstrong 公理系统:是一套推理规则,是模式分解算法的理论基础。主要用于求给定关系模式的码,从一组函数依赖求得蕴涵的函数依赖。
Armstrong 公理系统设 U 为属性集总体,
- A1 自反律:若
,则 为 所蕴涵。 - A2 增广律:若
为 F 所蕴涵,且 ,则 为 所蕴涵。 - A3 传递律:若
及 为 F 所蕴涵,则 为 所蕴涵。
【注】由自反律所得到的函数依赖均是平凡的函数依赖,自反律的使用并不依赖于
根据 A1,A2,A3 这三条推理规则得到下面三条推理规则:
- 合并规则:由
, ,由有 。 - 伪传递规则:由
, ,有 。 - 分解规则:由
及 ,有 。
引理 1:根据合并规则呵分解规则,可知:
定义 2:在关系模式
Armstrong 公理系统具有有效性和完备性:
- 有效性:由
出发根据 Armstrong 公理推导出 中。 - 完备性:
中的每一个函数依赖,必定可以由 出发根据 Armstrong 公理推导出来。
定义 3:
引理 2:设
定义 4:如果
引理 3:
定义 5:如果函数依赖集
中任一函数依赖的右部仅含有一个属性; 中不存在这样的函数依赖 ,使得 与 等价; 中不存在这样的函数依赖 , 有真子集 使得 与 等价。
【注】每一个函数依赖集
模式的分解
定义 1:关系模式
定义 2:函数依赖集合
模式分解的三个定义
对于一个模式的分解是多种多样的,但是分解后产生的模式应与原模式等价。对“等价”的概念形成了三种不同的定义:
- 分解具有无损连接性:对关系模式分解时,原关系模型下任一合法的关系值在分解之后应能通过自然联接运算恢复起来。
- 分解要保持函数依赖:对关系分解时,原关系的闭包与分解后关系闭包的并集相等。
- 分解既要保持函数依赖,又要具有无损连接性。
这三个定义是实行分解的三条不同的准则。按照不同的分解准则,模式所能达到的分离程度各不同,各种范式就是对分离程度的测度。
分解的无损连接性和保持函数依赖性
首先定义一下记号:
设
注意
- 如果两个关系中有相同的属性列,则按第二章中的自然连接的定义进行;
- 如果两个关系中没有相同的属性列,则按笛卡尔积运算进行;
将运算后得到的结果与其他关系进行重复 1、2 步计算,直到完成全部的连接运算。
引理:设
,即 的投影连接包含 ,分解后再连接起来的 肯定不会比原来小。 - 如果
,则 ,投影连接后再投影到子关系模式 直接投影到该子关系模式。即 。 ,多次投影连接的结果等于一次投影连接后的结果。
分解后的关系进行自然连接必包括分解前的关系,即分解不会丢失信息,但能增加信息,只有
无损连接定义:关系模式
定理 1:如果算法终止时表中有一行为
当关系模式
定理 2:对于
保持函数依赖定义:若
模式分解的算法
关于模式分解的几个重要事实
若要求分解保持函数依赖,那么模式分解总可以达到
若要求分解既保持函数依赖,又具有无损连接性,可以达到
若要求分解具有无损连接性,那一定可以达到
算法(合成法): 转换为 的保持函数依赖的分解
算法: 转换为 既有无损连接性又保持函数依赖的分解
算法(分解法): 转换为 的无损连接分解
引理 1:若
引理 2:
定理 :关系模式
算法: 达到 的具有无损连接性的分解
首先使用算法(分解法)得到
包含函数依赖和多值依赖的有效且完备的公理系统
A1:若
A2:若
A3:若
A4:若
A5:若
A6:若
A7:若
A8:若
由以上 8 条公理得知如下 4 条有用的推理规则:
- 合并规则:
, ,则 。 - 为传递规则:
, ,则 。 - 混合为传递规则:
, ,则 。 - 分解规则:
, ,则 , , 。
总结
- 关系模式的规范化,其基本思想如下:
- 规范化理论为数据库设计提供理论的指南和工具,仅仅是指南和工具。
- 并不是规范化程度越高,模式就越好,必须结合应用环境和现实世界的具体情况合理地选择数据库模式。