关系模式由五部分组成,是一个五元组:
R(U,D,DOM,F)
R 符号化的元组语义
U 一组属性
D 属性组U中的属性所来自的域
DOM 为属性到域的映射
F 为属性组U上的一组数据依赖
由于D、DOM与模式设计关系不大
因此在本章中把关系模式看作一个三元组:R
作为二维表,关系要符合一个基本的条件:
每个分量必须是不可分开的数据项。
满足了这个条件的关系模式就属于第一范式(1NF)
数据依赖是一个关系内部属性与属性之间的一种约束关系
数据依赖主要类型有函数依赖和多值依赖
定义6.1
设R(U)是一个属性集U上的关系模式,X和Y是U的子集
若对于R(U)的任意一个可能的关系r,
r中不可能存在两个元组在X上的属性值相等,而在Y的属性值不等,则称“X函数确定Y”或“Y函数依赖于X”
记作 X → Y X \rightarrow Y X→Y
既然叫做函数依赖,阅读定义之后我们知道如果Y函数依赖于X,则:
一个X的值只能确定一个Y的值,就类似于函数定义中的自变量和函数值的意义对应的关系
[例]Student(Sno,Sname,Ssex,Sage,Sdept),假设不允许重名,则有:
S n o → S s e x Sno\rightarrow Ssex Sno→Ssex
S n o → S a g e Sno\rightarrow Sage Sno→Sage
S n o → S d e p t Sno\rightarrow Sdept Sno→Sdept
S n o ← → S n a m e Sno\leftarrow\rightarrow Sname Sno←→Sname
S n a m e → S s e x Sname\rightarrow Ssex Sname→Ssex
S n a m e → S a g e Sname\rightarrow Sage Sname→Sage
S n a m e → S d e p t Sname\rightarrow Sdept Sname→Sdept
但 S s e x ↛ S a g e Ssex\not\rightarrow Sage Ssex→Sage, S s e x ↛ S d e p t Ssex\not\rightarrow Sdept Ssex→Sdept
X → Y X\rightarrow Y X→Y,但 Y ⊈ X Y\not\subseteq X Y⊆X是非平凡的函数依赖。
X → Y X\rightarrow Y X→Y,但 Y ⊆ X Y\subseteq X Y⊆X是平凡的函数依赖。
若 X → Y X\rightarrow Y X→Y则X称为这个函数依赖的决定因素。
定义6.2
在R(U)中,如果 X → Y X \rightarrow Y X→Y,并且对于X的任何一个真子集X‘,都有 X ′ ↛ Y X' \not\rightarrow Y X′→Y则称Y对X完全函数依赖,记作 X → F Y X \overset F\rightarrow Y X→FY。
若 X → Y X \rightarrow Y X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作 X → P Y X \overset P\rightarrow Y X→PY。
[例]在关系SC(Sno,Cno,Grade)中,有:
由于 S n o ↛ G r a d e Sno\not\rightarrow Grade Sno→Grade, C n o ↛ G r a d e Cno\not\rightarrow Grade Cno→Grade
因此:
( S n o , C n o ) → F G r a d e (Sno,Cno)\overset F\rightarrow Grade (Sno,Cno)→FGrade
( S n o , C n o ) → P S n o (Sno,Cno)\overset P\rightarrow Sno (Sno,Cno)→PSno
( S n o , C n o ) → P C n o (Sno,Cno)\overset P\rightarrow Cno (Sno,Cno)→PCno
定义6.3
在R(U)中,如果 X → Y X \rightarrow Y X→Y( Y ⊈ X Y\not\subseteq X Y⊆X), Y ↛ X Y\not\rightarrow X Y→X, Y → Z Y\rightarrow Z Y→Z, Z ⊈ Y Z\not\subseteq Y Z⊆Y,则称Z对X传递函数依赖,记为 X → 传 递 Z X\overset {传递}\rightarrow Z X→传递Z。
注:如果 Y → X Y\rightarrow X Y→X,即 X ← → Y X\leftarrow\rightarrow Y X←→Y,则Z直接依赖于X,而不是函数依赖。
[例] 在关系Std(Sno,Sdept,Mname)中,有:
S n o → S d e p t Sno\rightarrow Sdept Sno→Sdept, S d e p t → M n a m e Sdept\rightarrow Mname Sdept→Mname,
Mname传递函数依赖于Sno
定义6.4
设K为R中的属性或属性组合。若 K → F U K\overset F\rightarrow U K→FU,则K称为R的一个候选码。
如果U部分函数依赖于K,即 K → P U K\overset P\rightarrow U K→PU,则K称为超码。
候选码是最小的超码,即K的任意真子集都不是候选码。
若关系模式R有多个候选码,则选定其中的一个作为主码。
包含在任何一个候选码中的属性,称为主属性。
不包含在任何码中的属性称为非主属性。
如果整个属性组是码,称为全码。
[例 6.2]
S(Sno,Sdept,Sage)中,单个属性Sno是码
SC(Sno,Cno,Grade)中,(Sno,Cno)是码
[例 6.3]R(P,W,A)
P: 演奏者 W:作品 A:听众
一个演奏者可以演奏多个作品
某一个作品可以被多个演奏者演奏
听众可以欣赏不同演奏者的不同作评
所以综上,码为(P,W,A),即全码。
定义6.5
关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码,也称外码。
范式是符合某一种级别的关系模式的集合。
种类如下图描述:
通俗理解,范式就是关系模式,以上种类的范式就是关系模式按要求进行分类然后赋予他们新的定义。
各范式之间存在联系:
某一关系模式R为第n范式,可以简记为,R∈nNF。
1 N F ⊃ 2 N F ⊃ 3 N F ⊃ B C N F ⊃ 4 N F ⊃ 5 N F 1NF\supset 2NF\supset 3NF\supset BCNF\supset 4NF\supset 5NF 1NF⊃2NF⊃3NF⊃BCNF⊃4NF⊃5NF
用饼状图描述各类范式间关系如下:
如上文所述,第一范式的定义如下
作为二维表,关系要符合一个基本的条件:
每个分量必须是不可分开的数据项。
满足了这个条件的关系模式就属于第一范式(1NF)
一个低一级的范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。
定义6.6
若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF。
[例 6.4]S-L-C(Sno,Sdept,Sloc,Cno,Grade),Sloc为学生的住处,并且每个系的学生住在同一个地方。S-L-C的码为(Sno,Cno).
函数依赖有:
出现这种问题的原因:
例子中有两类非主属性:
解决办法
用投影分解把关系模式S-L-C分解称两个关系模式
定义6.7
设关系模式R∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z( Z ⊉ Y Z\not\supseteq Y Z⊇Y),使得 X → Y X\rightarrow Y X→Y, Y → Z Y\rightarrow Z Y→Z成立, Y ↛ X Y\not\rightarrow X Y→X不成立,则称R∈3NF。
SC没有传递依赖,因此SC∈3NF
S-L中 S n o → S d e p t Sno\rightarrow Sdept Sno→Sdept( S d e p t ↛ S n o Sdept\not\rightarrow Sno Sdept→Sno), s D e p t → S l o c sDept\rightarrow Sloc sDept→Sloc,可得 S n o → 传 递 S l o c Sno\overset {传递}\rightarrow Sloc Sno→传递Sloc
解决的办法如下,将S-L分解成
通常认为BCNF是修正的第三范式,有时也称为扩充的第三范式。
定义6.8
设关系模式R∈1NF,若 X → Y X\rightarrow Y X→Y且 Y ⊆ X Y\subseteq X Y⊆X时X必含有码,则R∈BCNF。
换言之,在关系模式R中,如果每一个决定属性集都包含候选码,则R∈BCNF。
[例 6.9]设学校中某一门课程由多个教师讲授,他们使用相同的一套参考书。每个教员可以讲授多门课程,每种参考书可以供多门课程使用。
关系模式Teaching(C,T,B)
非规范化关系如下表所示
定义6.9
设R(U)是属性集U上的一个关系模式。,X,Y,Z是U的子集,并且Z=U-X-Y。关系模式中多值依赖 X → → Y X\rightarrow\rightarrow Y X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关。
[例]Teaching(C,T,B)
Teaching具有唯一候选码(C,T,B),即全码。Teaching∈BCNF对于C的每一个值,T有一组值与之对应,而不论B取何值。因此T多值依赖与C,即 C → → T C\rightarrow\rightarrow T C→→T。
若 X → → Y X\rightarrow\rightarrow Y X→→Y,而Z= ∅ \emptyset ∅,则称 X → → Y X\rightarrow\rightarrow Y X→→Y为平凡的多值依赖。
否则称 X → → Y X\rightarrow\rightarrow Y X→→Y为非平凡的多值依赖。
[例 6.10]关系模式WSC(W,S,C)中,W表示仓库,S表示保管员,C表示商品。假设每个仓库有若干个保管员,有若干种商品。每个保管员报关所在仓库的所有商品,每种商品被所有保管员保管。
按照语义对于W的每一个值,S有一个完整的集合与之对应而不论C取何值。所以 W → → S W\rightarrow\rightarrow S W→→S。由于C与S的完全对称性,必然有 W → → C W\rightarrow\rightarrow C W→→C成立。
定义6.10
关系模式R∈1NF,如果对于R的每个非平凡多值依赖 X → → Y X\rightarrow\rightarrow Y X→→Y( Y ⊈ X Y\nsubseteq X Y⊈X),X都含有码,则,R∈4NF。
由介绍范式关系的开篇可知,如果一个关系模式是4NF,则必为BCNF。
在[例 6.10]的WSC中, W → → S W\rightarrow\rightarrow S W→→S, W → → C W\rightarrow\rightarrow C W→→C,他们都是非平凡多值依赖,而W不是码,关系模式WSC的码是(W,S,C),即All-key,因此, W S C ∉ 4 N F WSC\notin4NF WSC∈/4NF,可以把WSC分解成WS(W,S),WC(W,C), W S ∈ 4 N F WS\in 4NF WS∈4NF, W C ∈ 4 N F WC\in 4NF WC∈4NF。
一个系有若干专业 : 系 → 专 业 名 系\rightarrow专业名 系→专业名
每个专业每年只招一个班 : ( 专 业 名 , 入 学 年 份 ) ← → 班 号 (专业名,入学年份)\leftarrow\rightarrow班号 (专业名,入学年份)←→班号
每个班有若干学生 : 学 号 → 班 号 学号\rightarrow班号 学号→班号
一个系的学生住在同一个宿舍区: 系 名 → 宿 舍 区 系名\rightarrow宿舍区 系名→宿舍区
学生参加某学会有一个入会年份 ( 学 号 , 学 会 名 ) → 入 会 年 份 (学号,学会名)\rightarrow入会年份 (学号,学会名)→入会年份
关系模式如下:
学生(学号、姓名、出生年月、班号)
候选码:学号 外码:班号
班级(班号、专业名、班级人数、入校年份)
候选码:班号,(专业名,入校年份)
专业(专业名,系名)
候选码:专业名 外码:系名
系(系名、系号、系办公室地点、系人数,宿舍区)
候选码:系号、系名。
学会(学会名、成立年份、地点、学会人数)
候选码:学会名
学生参加学会(学号,学会名,入会年份)
候选码:(学号,学会名)
不存在传递函数依赖、部分函数依赖。
6、
(1)
A→BCDE, BCDE⊈A, A是码;
BC→DE, DE⊈BC, BC必含有码.
BC含有码时是BCNF。
(2)
码:ACE, BCE, CDE.
(3)
不存在非主属性,属于3NF.
A, BC, DE不含码,不属于BCNF。
7、
(1)正确
(2)正确
(3)正确
(4)正确
(5)正确
(6)正确
(7)正确
(8)错误:例如上面的关系模式 ( 学 号 , 学 会 名 ) → 入 会 年 份 (学号,学会名)\rightarrow入会年份 (学号,学会名)→入会年份 ,但是 学 号 ↛ 入 会 年 份 学号\not\rightarrow入会年份 学号→入会年份, 学 会 名 ↛ 入 会 年 份 学会名\not\rightarrow入会年份 学会名→入会年份
8、
(1)
若R是BCNF,X →Y且Y ⊈X时X必含有码,每一个决定因素都含码。
若R是3NF,那么,R中不存在这样的码X、属性组Y及非主属性Z(Z ⊇\ Y), 使得X→Y,Y→Z成立,Y ↛ X不成立
如果已经确定了R是BCNF,那么每一个决定因素都含码,Y含码,Y→X成立,所以,如果R是BCNF,那么它也是3NF。
(2)
若R是3NF,那么,R中不存在这样的码X、属性组Y及非主属性Z(Z ⊇ \Y), 使得X→Y,Y→Z成立,Y ↛ X不成立
若R不属于2NF,R中有非主属性部分函数依赖于任一个候选码,也就是说有非主属性Z部份依赖于X,假设部分依赖的属性组为Y的话,那么 Z ⊈ Y Z\not\subseteq Y Z⊆Y, X → Y X\rightarrow Y X→Y, Y → Z Y\rightarrow Z Y→Z, Y → X Y\rightarrow X Y→X与3NF定义矛盾,也就不属于3NF
一.
Y(X1,X2,X3,X4)
(X1,X2)→X3
X2→X4
二.
R(A,B,C,D)
F={AB→D,AC→BD,B→C}
三.
R(X,Y,Z,W)
F={Y←→W,XY→Z}
四.
R(A,B,C,D,E) F={A→B,CE→A,E→D}
五.
R(商店编号,商品编号,数量,部门编号,负责人)
每个商店的每种商品只在一个部门销售
( 商 店 编 号 , 商 品 编 号 ) → 部 门 编 号 (商店编号,商品编号)\rightarrow 部门编号 (商店编号,商品编号)→部门编号
每个商店的每个部门只有一个负责人,
( 商 店 编 号 , 部 门 编 号 ) → 负 责 人 (商店编号,部门编号)\rightarrow负责人 (商店编号,部门编号)→负责人
每个商店的每种商品只有一个库存数量。
( 商 店 编 号 , 商 品 编 号 ) → 数 量 (商店编号,商品编号)\rightarrow数量 (商店编号,商品编号)→数量