数据库学习笔记之关系数据库理论
1 基本概念
1.1 范式
1 范式分类
- 第一范式:
1NF
- 第二范式:
2NF
- 第三范式:
3NF
- 巴斯-科德范式:
BCNF
- 第四范式:
4NF
- 第五范式:
5NF
1.2 依赖
- 若 \(X→Y\) ,但 \(Y\subsetneq X\) ,则称 \(X→Y\) 是非平凡的函数依赖
- 若 \(X→Y\) ,且 \(Y\subseteq X\) ,则称 \(X→Y\) 是平凡的函数依赖
1.3 候选码
- 概念:可以推导出所有的属性
- 方法
- 只出现在左边的,一定是候选码
- 只出现在右边的,一定不是候选码
- 左右都出现的,不一定是候选码
- 左右都不出现的,一定是候选码
- 再求出已经确定的候选码的闭包,如果可以推导出全部,则当前的及时候选码;否则,就要依次推导每一个可能的值
假设有一个映射
R<U,F>, U(A,B,C,D,E,G), F={AB→C,CD→E,E→A,A→G}
,求其候选码
- B、D 都只在左边出现,一定是候选码
- G 只在右边出现,一定不是候选码
- A、C、E 左右均出现,不一定
- 用已有的候选码 BD,什么也推不出来,则继续加入可能的属性:
- \((BDA)^+=ABCDEG\)
- \((BDC)^+=ABCDEG\)
- \((BDE)^+=ABCDEG\)
综上,候选码为
{(BDA)、(BDC)、(BDE)}
1.4 其他概念
- 超码:能表示出所有属性的集合
- 主码:从候选码中随意取出一个,作为主码
- 主属性:包含在所有候选码中的属性
- 非主属性:不包含在左右候选码中的属性
- 全码:所有的属性都是主码
2 三大范式
2.1 第一范式
- 定义:所有的字段值均是不可再分割的原子值
编号 | 姓名 | 性别 | 年龄 | 电话 |
---|---|---|---|---|
1 | 张三 | 男 | 25 | 123456 |
2 | 李四 | 女 | 20 | 112233 |
3 | 王五 | 男 | 18 | 321654 |
2.2 第二范式
- 定义:不包含非主属性对码的部分函数依赖,即一个表中只能保存一种数据,不能将多种数据存放在同一张表中
订单编号 | 商品编号 | 商品名称 | 数量 | 单位 |
---|---|---|---|---|
001 | 1 | 台灯 | 2 | 台 |
002 | 2 | 椅子 | 1 | 把 |
003 | 3 | 书包 | 5 | 个 |
上述表中,包含了订单编号、商品编号,明显属于不同种类的数据
2.3 第三范式
- 定义:不包含非主属性对码的传递函数依,确保数据表中的每一列数据都和主键直接相关,而不能间接相关
比如设计一个订单数据表的时候,将客户编号作为一个外键与订单表建立关系,而不是在订单表中直接添加客户信息
订单编号 | 订单项目 | 数量 | 客户编号 |
---|---|---|---|
001 | 挖掘机 | 5 | 1 |
002 | 吊车 | 3 | 2 |
003 | 叉车 | 2 | 2 |
客户编号 | 客户名称 | 联系方式 |
---|---|---|
1 | 张三 | 123456789 |
2 | 李四 | 321654987 |
2.4 BC 范式
- 定义:消除每一属性对候选键的传递依赖,BCNF 是修正的笫三范式
例如存在关系
F={书号→书名, (书名、作者)→书号}
,存在传递依赖,不属于 BC 范式,将其拆分为F={书号→书名, 作者→书名}
, 即可满足 BC 范式
3 公理系统
3.1 三大定律
- 自反律:若 \(Y\subseteq X\subseteq U\) ,则 \(X→Y\) 为 \(F\) 所蕴含
- 增广律:若 \(X→Y\) 为 \(F\) 所蕴含,且 \(Z \subseteq U\),则 \(XZ→YZ\) 为 \(F\) 所蕴含
- 传递律:若 \(X→Y\) 及 \(Y→Z\) 为 \(F\) 所蕴含,则 \(X→Z\) 为 \(F\) 所蕴含
3.2 三大规则
- 合并规则:由 \(X→Y,X→Z\),有 \(X→YZ\)
- 伪传递规则:由 \(X→Y,WY→Z\),有 \(XW→Z\)
- 分解规则:由 \(X→Y\) 及 \(Z \subseteq Y\),有 \(X→Z\)
4 最小依赖集
4.1 求解步骤
- 拆右边为多个元素的
- 除去当前的元素,求它的闭包,将集合中所有的元素都算完
- 左边最小化(遮住一个元素,看能否由其他元素推导出来)
4.2 例题
已知
R<U,F>, U(A,B,C,D,E,F,G), F={BCD→A, BC→E, A→F, F→G, C→D, A→G}
,求F
的最小依赖集
-
右边均为一个元素,不可拆分
-
分别求闭包
- 对于
BCD→A
,去除BCD
,无法推出A
,保留 - 对于
BC→E
,去除SC
,无法推出E
,保留 - 对于
A→F
、F→G
、C→D
去除A、F、C
后,均无法推出后方,保留 - 对于
A→G
,去除A
,因为F→G
,因此可以去除
- 对于
-
左边最小化
-
对于
BCD→A
-
去除
B
,CD
无法推出B
,保留B
-
去除
C
,BD
无法推出C
,保留C
-
去除
D
,BC
可以推出D
,删除D
-
BCD→A
最小化后为AC→A
-
-
对于
BC→E
- 去除
B
,C
无法推出B
,保留B
- 去除
C
,B
无法推出C
,保留C
BC→E
最小化后仍为SC→E
- 去除
-
其余均为左边均为单属性,无法继续分割,保留
-
因此,上述题目中,F
的最小依赖集为 {BC→A, BC→E, A→F, F→G, C→D}
5 模式分解
5.1 分解准则
- 无损连接:分解之后再次连接,和分解完全前一样
- 保持函数依赖:各属性之间依赖不改变
- 分解步骤
- 求出最小的函数依赖集
- 把不在
F
里面的属性都找出来,单独分一类 - 把每一个依赖左边相同的分成一类,若没有一样的,则将
A→D
改为{AD}
;若有{A→B, A→C}
,则改为{ABC}
- 如果候选码没有出现在分离里面,则将任意一个候选码分为一类
5.2 例题
已知
R(ABCDEGH), F={A→D, E→D, D→B, BC→D, DC→A}
,求保持函数依赖的3NF
分解
- 最小函数依赖集为:
F={A→D, E→D, D→B, BC→D, DC→A}
GH
没在F
里面,单独分为一类,{GH}
- 候选码为
CE
,未出现在分离里,归为一类,{CE}
- 则保持函数依赖的
3NF
分解为{AD}{ED}{DB}{BCD}{DCA}{CE}{GH}