<>码和属性的关系

<>函数依赖

f(X)→Yf(X)\rightarrow Yf(X)→Y,则YYY函数依赖于XXX。理解为知道XXX后,就可以推出YYY;而且,能且仅能推出唯一的YYY
。这类似于数学上的函数。
平凡函数依赖:X→YX \rightarrow YX→Y,同时Y∈XY \in XY∈X,则是平凡函数依赖。
非平凡函数依赖:X→FYX \xrightarrow{F} YXF​Y,同时Y∉XY \notin XY∈/​X,则是平凡函数依赖。
完全函数依赖:X→YX \rightarrow YX→Y,而且任何XXX的真子集X′X^{'}X′,都没有X′→Y
X^{'}\rightarrow YX′→Y
部分函数依赖:X→PYX \xrightarrow{P} YXP​Y,而且任何XXX的真子集X′X^{'}X′,存在至少一个X′X^{'}
X′,X′→PYX^{'}\xrightarrow{P} YX′P​Y。

<>码

一个关系的所有属性。
候选码: 唯一标识一个关系的属性组
主码: 候选码多于一个,从候选码中选出的一个码作为主码。
主属性: 候选码的所有属性。
非主属性: 不包含在任何候选码中的属性
全码: 极端情况下,整个属性组都是码。
外码: XXX不是该关系模式的码,但是XXX是另一个关系模式的码。比如(Sno,Cno,Grade)(Sno, Cno, Grade)(Sno,Cno,Gra
de)中的Sno不是码,但SnoSnoSno是(Sno,Sname,Sage)(Sno, Sname, Sage)(Sno,Sname,Sage)的码,则Sno
SnoSno是外码

<>范式

范式的作用是减少数据冗余和消除各种异常。

<>1NF

所有的关系模式都是1NF

<>2NF

在1NF的基础上,不存在部分函数依赖。
比如给出一个表:
(Sno,Sdept,Sloc,Cno,Grade)(Sno,Sdept,Sloc,Cno,Grade)(Sno,Sdept,Sloc,Cno,Grade)
其中SnoSnoSno学号,SdeptSdeptSdept是系,SlocSlocSloc是寝室地址,CnoCnoCno是课程号,GradeGradeGrad
e是该学生某个课程的成绩。
(Sno,Cno)→FGradeSno→Sdept, (Sno,Cno)→PSdeptSno→Sloc, (Sno,Cno)→PSloc (Sno,
Cno)\xrightarrow{F} Grade \\ Sno \rightarrow Sdept, \ (Sno,Cno)\xrightarrow{P}
Sdept\\ Sno \rightarrow Sloc, \ (Sno, Cno)\xrightarrow{P} Sloc(Sno,Cno)F​GradeSn
o→Sdept, (Sno,Cno)P​SdeptSno→Sloc, (Sno,Cno)P​Sloc
那么上述存在了部分函数依赖,需要把部分函数依赖的进行消除:
Sno→SdeptSno→Sloc Sno \rightarrow Sdept \\ Sno \rightarrow Sloc Sno→SdeptSno→Sl
oc
因此得出新的关系模式:
(Sno,Sloc,Sdept)(Sno,Cno,Grade) (Sno, Sloc, Sdept) \\ (Sno, Cno, Grade) (Sno,Sl
oc,Sdept)(Sno,Cno,Grade)

<>3NF

在2NF的基础上,消除传递函数依赖。

传递函数依赖: X→YX\rightarrow YX→Y,Y↛XY\nrightarrow XY↛X,Y→ZY\rightarrow ZY→Z,则ZZZ
传递依赖于XXX。

比如上述的关系模式:
(Sno,Sloc,Sdept)(Sno, Sloc, Sdept)(Sno,Sloc,Sdept)

Sno→SlocSdept↛SnoSloc→Sdept Sno\rightarrow Sloc \\ Sdept \nrightarrow Sno \\
Sloc \rightarrow SdeptSno→SlocSdept↛SnoSloc→Sdept
那么SdeptSdeptSdept函数传递依赖与SnoSnoSno。3NF需要消除这种模式。
(Sno,Sdept)(Sdept,Sloc) (Sno, Sdept) \\ (Sdept, Sloc) (Sno,Sdept)(Sdept,Sloc)

<>BCNF

在3NF基础上,使得每一个决定因素都包含码。
给出一个BCNF的反例:
STJ(S,T,J) STJ(S, T, J) STJ(S,T,J)
其中SSS是学生,TTT是教师,JJJ是课程。所以有:
(S,J)→T(S,T)→JT→J (S, J)\rightarrow T \\ (S, T)\rightarrow J \\ T\rightarrow J
(S,J)→T(S,T)→JT→J
(S,J)(S, J)(S,J)和(S,T)(S, T)(S,T)都是候选码。TTT是决定因素,但是TTT不包含码。

在只考虑函数依赖的情况下,BCNF是规范化程度最高的范式。

<>4NF

多值依赖: 设R(U)R(U)R(U)是属性集UUU上的一个关系模式,X,Y,ZX,Y,ZX,Y,Z是UUU的子集,且Z=U−X−YZ=U-X-YZ=U−X−
Y。当且仅当R(U)R(U)R(U)的任一关系rrr,给定的一对(x,y)(x,y)(x,y)值,有一组YYY的值,这组值仅仅取决于XXX的值而与ZZZ
的值无关,则成R(U)R(U)R(U)中的多值依赖X→→YX\rightarrow \rightarrow YX→→Y成立。

平凡多值依赖: 若X→→YX \rightarrow \rightarrow YX→→Y,而Z=∅Z=\emptyZ=∅,则称X→→Y
X\rightarrow \rightarrow YX→→Y为平凡多值依赖。

4NF: 关系模式R<U,F>∈1NFR<U,F>\in 1NFR<U,F>∈1NF,如果对于RRR的每个非平凡多值依赖X→→Y
X\rightarrow \rightarrow YX→→Y(Y⊈XY \nsubseteq XY⊈X),X都含有码,则R<U,F>∈4NF
R<U,F>\in 4NFR<U,F>∈4NF。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信