第六章-关系数据理论
本章重点
数据依赖:
- 函数依赖
- 多值依赖
期末考试的最后一道大题,约10分(仅供参考)
问题的提出
第一范式:每一个分量必须是不可分的数据项。满足了这个条件的关系模式就属于第一范式。
第一范式是对关系数据模型最基本的要求。
理解:第一范式保证了数据库表不出现“表中有表”的情况。
数据依赖:数据依赖是一个关系内部属性与属性之间的一种约束关系。这种约束关系是通过属性间值的相等与否体现出来的数据间相互联系。
数据依赖中最重要的是函数依赖(Functional Dependency, FD)和多值依赖(Multi-Valued Dependency, MVD)。
函数依赖举例:
e.g. Sname = f(Sno), Sdept = f(Sno),即Sno函数决定Sname,Sno函数决定Sdept。
但是,这样的关系模式存在以下问题:
- 数据冗余
- 更新异常
- 插入异常
- 删除异常
一个好的模式应当不会发生插入异常、删除异常和更新异常,数据冗余应尽可能少。
e.g. 可以将多个关系模式进行拆解,得到较为简洁的关系模式:
- (Sno, Cno, Grade)
- (Sno, Sdept)
- (Sdept, Sloc)
基本概念
函数依赖
设R(U)是属性集U上的关系模式,X, Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y或Y函数依赖于X,记作X→Y。
- 平凡的函数依赖:X→Y,但 Y ⊆ X Y\subseteq X Y⊆X,则称X→Y是平凡的函数依赖。对于任一关系模式,平凡函数依赖都是必然成立的。
- 决定因素:若X→Y,则X称为这个函数依赖的决定属性组,也称为决定因素。
- 若X→Y,Y→X,则记作X←→Y。
- 若Y不函数依赖于X,则记作X ↛ \nrightarrow ↛Y。
完全函数依赖:在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X ↛ \nrightarrow ↛Y,则称Y对X完全函数依赖,记作X F → \begin{matrix} F \\ → \end{matrix} F→Y。(full)
e.g. 在SC表中,Sno和Cno共同决定Grade,缺一不可。
部分函数依赖:若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X P → \begin{matrix} P \\ → \end{matrix} P→Y。(partial)
e.g. (学号,身份证号)→姓名,其实只需要一个属性就能确定姓名,因此为部分函数依赖。
完全函数依赖和部分函数依赖共同组成了函数依赖。
传递函数依赖:在R(U)中,如果X→Y(Y ⊈ \nsubseteq ⊈X),Y ↛ \nrightarrow ↛X,Y→Z,Z ⊈ \nsubseteq ⊈Y,则称Z对X传递函数依赖。记作X 传递 → \begin{matrix} 传递 \\ → \end{matrix} 传递→ Y
注:
- Y ⊈ \nsubseteq ⊈X和Z ⊈ \nsubseteq ⊈Y消除了“平凡函数依赖”
- 这里加上Y ↛ \nrightarrow ↛X,是因为如果Y→X,则X←→Y,实际上是直接函数依赖而非传递函数依赖
码
注:第二章中已给出若干定义,详见第二章笔记。
超码:如果U函数依赖于K,即K→U,则K称为超码。
范式
要求:知道定义;会判断(4步)
判断步骤:
- 写函数依赖
- 找候选码
- 找主属性、非主属性
- 根据定义判断
各种范式之间的关系:向下兼容
下文中的“*NF”,代表“第*范式”。
1NF
如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。
只有满足了1NF的数据库模式才能被称为关系数据库。
不满足1NF的情况:
个人信息 | ||
姓名 | 身份证号 |
个人信息就是一个可以再拆分的数据项,故不满足1NF。
后续判断满足“第几范式”的时候,需要首先满足第一范式的条件,才能做后续的判定。
2NF
定义:若R∈1NF,且每一个非主属性完全函数依赖于任何一个候选码,则R∈2NF。
不满足2NF的例子:关系模式S-L-C(Sno, Sdept, Sloc, Cno, Grade)。学生的住处可以依赖于专业。(e.g. 中国海洋大学计算机学生(2021级)都住在听海苑)
2NF消除了“部分函数依赖”。
3NF
定义:设关系模式R<U, F>∈1NF,若R中不存在这样的码X,属性组Y以及非主属性Z(Z ⊈ \nsubseteq ⊈ Y)使得X→Y,Y→Z成立,Y ↛ \nrightarrow ↛X,则称R<U, F>∈3NF。
3NF消除了非主属性对码的“传递函数依赖”和“部分函数依赖”。
e.g. 定义S-L(Sno, Sdept, Sloc),由Sno→Sdept(Sdept ↛ \nrightarrow ↛Sno), Sdept→Sloc,可得传递函数依赖,因此S-L ⊈ \nsubseteq ⊈ 3NF。
BCNF
关系模式R<U, F>∈1NF,若X→Y且Y ⊈ \nsubseteq ⊈X时X必含有码,则R<U, F>∈BCNF。
e.g. (使用解题模板完成)关系模式STJ(S, T, J)中,S表示学生,T表示老师,J表示课程。每个老师只教一门课,每门课有若干老师,某一学生选定某门课,就对应一个固定的老师。因此可得如下函数依赖:
(S, J)→T, (S, T)→J, T→J
这里(S, J)和(S, T)都是候选码。
因此,主属性是S, J, T,非主属性是 ∅ \emptyset ∅。
STJ是3NF,因为没有任何非主属性对码的传递依赖和部分依赖,但STJ不是BCNF关系,因为T是决定因素,而T不包含码。
多值依赖
要求:掌握
- 定义
- 举例分析
- 性质
考试一般不考分解,如果遇到需要分解的问题时,直接将关系拆解即可。
定义:设R(U)是属性集U上的一个关系模式。X, Y, Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x, z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关。
注:多值依赖的z扩大后,不一定仍然成立。
e.g. (C, B, T) C: Course B: Book T: Teacher
给定一对(课程,老师),有一组参考书的值,这组值仅与课程有关,与老师无关。(C→→B)
【同理】给定一对(课程,参考书),有一组老师的值,这组值仅与课程有关,与参考书无关。(C→→T)
课程C | 教师T | 参考书B |
---|---|---|
物理 | 李勇 | 普通物理学 |
物理 | 李勇 | 光学原理 |
物理 | 李勇 | 物理习题集 |
物理 | 王军 | 普通物理学 |
物理 | 王军 | 光学原理 |
物理 | 王军 | 物理习题集 |
数学 | 李勇 | 数学分析 |
数学 | 李勇 | 微分方差 |
数学 | 李勇 | 高等代数 |
数学 | 张平 | 数学分析 |
数学 | 张平 | 微分方差 |
数学 | 张平 | 高等代数 |
⋮ \vdots ⋮ | ⋮ \vdots ⋮ | ⋮ \vdots ⋮ |
如果去掉上述表格中的任意一行,则无法继续保证多值依赖。
多值依赖的性质:(常考选择题)
- 对称性:若X→→Y,则X→→Z,其中Z=U-X-Y。
- 传递性:若X→→Y,Y→→Z,则X→→Z-Y。(易错点)
- 函数依赖可以看作是多值依赖的特殊情况(“一”是“多”的特殊情况)
- 若X→→Y,X→→Z,则X→→YZ。(并)
- 若X→→Y,X→→Z,则X→→Y ∩ \cap ∩Z。(交)
- 若X→→Y,X→→Z,则X→→Y-Z,X→→Z-Y。(差)
4NF
4NF就是限制关系模式的属性之间不允许右非平凡且非函数依赖的多值依赖。
数据依赖的公理系统
对于满足一组函数依赖F的关系模式R<U, F>,其任何一个关系r,若函数依赖X→Y都成立(即r中任意两元组t, s,若t[X]=s[X],则t[Y]=s[Y]),则称F逻辑蕴含X→Y。
这里的逻辑蕴含可以理解为“推导出”,即用已知函数依赖推导出新的函数依赖。
Armstrong公理系统 设U为属性集总体,F是U上的一组函数依赖,于是有关系模式R<U, F>,对R<U, F>来说有以下的推理规则:
- 自反律:若 Y ⊆ X ⊆ U Y\subseteq X\subseteq U Y⊆X⊆U,则X→Y为F所蕴含。
- 增广律:若X→Y为F所蕴含,且 Z ⊆ U Z \subseteq U Z⊆U,则XZ→YZ为F所蕴含。
- 传递律:若X→Y及Y→Z为F所蕴含,则X→Z为F所蕴含。
根据上述三条推理规则可得如下规则:
- 合并规则:由X→Y,X→Z,有X→YZ
- 伪传递规则:由X→Y,WY→Z,有XW→Z
- 分解规则:由X→Y及Z$\subseteq $Y,有X→Z
引理:X→ A 1 A 2 … A n A_1A_2\dots A_n A1A2…An成立的充分必要条件是X→ A i A_i Ai成立(i=1, 2, …, k)。
定义:在关系模式R<U, F>中为F所逻辑蕴含的函数依赖的全体叫作F的闭包,记为 F + F^{+} F+。
人们把自反律、传递律和增广律称为Armstrong公理系统。Armstrong公理系统是有效的、完备的。Armstrong公里的有效性指的是:由F触发根据Armstrong公理推导出来的每一个函数依赖一定在 F + F^{+} F+中,;完备性是指 F + F^{+} F+中的每一个函数依赖,必定可以由F出发根据Armstrong公理推导出来。
e.g. 已知关系模式R<U, F>,其中
U={A, B, C, D, E}, F={AB→C, B→D, C→E, EC→B, AC→B}。
求 ( A B ) F + (AB)_{F}^{+} (AB)F+。
问题理解:给了AB,能准确得到谁的值?
解:由AB→C, B→D得ABCD,再由C→E得ABCDE,此时已经等于全部属性集合,故 ( A B ) F + (AB)_{F}^{+} (AB)F+=ABCDE。
定义:如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集,亦称为最小依赖集或最小覆盖。
- F中任一函数依赖的右部仅含有一个属性。
- F中不存在这样的函数依赖X→A,使得F与F-{X→A}等价。
- F中不存在这样的函数依赖X→A,X有真子集Z使得 F − X → A ∪ Z → A F-{X→A}\cup {Z→A} F−X→A∪Z→A与F等价。
定义理解:
- 模式分解的答案应满足minimal cover的要求
- 由定义第一小条知,“箭头右边”有多个属性时,需要拆开求“闭包”
- 由定义第二小条知,不存在“可有可无”的函数依赖 e.g. Sno->Sdept, Sdept->Sloc,此时可以去掉Sno->Sloc
- 由定义第三小条知,不能有“部分函数依赖”
e.g. 对于关系模式S<U, F>,其中:
U={Sno, Sdept, Mname, Cno, Grade},
F={Sno→Sdept, Sdept→Mname, (Sno, Cno)→Grade}
F’={Sno→Sdept, Sno→Mname, Sdept→Mname, (Sno, Cno)→Grade, (Sno, Sdept)→Sdept}
根据定义可知F为最小覆盖,而F’不是。因为F’-{Sno→Mname}与F’等价,F’-{(Sno, Sdept)→Sdept}与F’等价。
模式的分解
模式的分解即“属性的投影”。
关系模式分解的标准:
- 分解具有无损依赖性
- 分解要保持函数依赖
- 分解既要保持函数依赖,又要具有无损连接性
e.g. 已知关系模式R<U, F>,其中U={Sno, Sdept, Mname},F={Sno→Sdept, Sdept→Mname}。
Sno | Sdept | Mname |
---|---|---|
S1 | D1 | 张五 |
S2 | D1 | 张五 |
S3 | D2 | 李四 |
S4 | D3 | 王一 |
由于R中存在传递函数依赖Sno→Mname,因此会发生更新异常,如删除最后一行,则D3系的系主任王一这一信息也会丢掉。于是进行如下分解:
ρ 1 = { R 1 < S n o , ϕ > , R 2 < S d e p t , ϕ > , R 3 < M n a m e , ϕ > } \rho_1=\left \{ R_1<Sno, \phi>, R_2<Sdept, \phi>, R_3<Mname, \phi>\right \} ρ1={R1<Sno,ϕ>,R2<Sdept,ϕ>,R3<Mname,ϕ>}
但是无法回答“S1在哪个系”了。
于是进行另一种分解:
ρ 2 = { R 1 < { S n o , S d e p t } , { S n o → S d e p t } > , R 2 < { S n o , M n a m e } , { S n o → M n a m e } > } \rho_2=\left \{ R_1<\left \{ Sno, Sdept\right \}, \left \{ Sno→Sdept\right \}>, R_2<\left \{Sno, Mname\right \}, \left \{Sno→Mname\right \}>\right \} ρ2={R1<{Sno,Sdept},{Sno→Sdept}>,R2<{Sno,Mname},{Sno→Mname}>}
但并未具有“保持函数依赖”的特性。
最后进行了如下分解:
ρ 3 = { R 1 < { S n o , S d e p t } , { S n o → S d e p t } > , R 2 { S d e p t , M n a m e } , { S d e p t → M n a m e } > } \rho_3=\left \{R_1<\left \{Sno, Sdept \right \}, \left \{ Sno→Sdept \right \}>, R_2 \left \{ Sdept, Mname \right \}, \left \{Sdept→Mname\right \}>\right \} ρ3={R1<{Sno,Sdept},{Sno→Sdept}>,R2{Sdept,Mname},{Sdept→Mname}>}
可以证明此分解既具有无损连接性,又保持函数依赖。
Chase定理 如果下述算法终止时表中有一行为 a 1 , a 2 , … , a n a_1, a_2, \dots, a_n a1,a2,…,an,则 ρ \rho ρ为无损连接分解。
e.g. 已知R<U, F>, U={A, B, C, D, E}, F={AB→C, C→D, D→E},R的一个分解为 R 1 ( A , B , C ) R_1(A, B, C) R1(A,B,C), R 2 ( C , D ) R_2(C, D) R2(C,D), R 3 ( D , E ) R_3(D, E) R3(D,E)。
首先构造初始表:(分解里有的就用a,没有的就用b;a的下标体现列号,b的下标体现列号和行号)
A | B | C | D | E |
---|---|---|---|---|
a 1 a_1 a1 | a 2 a_2 a2 | a 3 a_3 a3 | b 14 b_{14} b14 | b 15 b_{15} b15 |
b 21 b_{21} b21 | b 22 b_{22} b22 | a 3 a_3 a3 | a 4 a_4 a4 | b 25 b_{25} b25 |
b 31 b_{31} b31 | b 32 b_{32} b32 | b 33 b_{33} b33 | a 4 a_4 a4 | a 5 a_5 a5 |
然后进行整合:
A | B | C | D | E |
---|---|---|---|---|
a 1 a_1 a1 | a 2 a_2 a2 | ⭐ a 3 a_3 a3 | a 4 a_4 a4 | a 5 a_5 a5 |
b 21 b_{21} b21 | b 22 b_{22} b22 | ⭐ a 3 ⭐a_3 ⭐a3 | ⭐ a 4 a_4 a4 | b 25 b_{25} b25 |
b 31 b_{31} b31 | b 32 b_{32} b32 | b 33 b_{33} b33 | ⭐ a 4 a_4 a4 | a 5 a_5 a5 |
因为第一行全都变成了 a i a_i ai的格式,因此具有无损连接性。