版权声明:所有的博客仅仅作为个人笔记使用!!!!!!! https://blog.csdn.net/qq_35976351/article/details/83010476
码和属性的关系
函数依赖
f(X)→Y,则
Y函数依赖于
X。理解为知道
X后,就可以推出
Y;而且,能且仅能推出唯一的
Y。这类似于数学上的函数。
平凡函数依赖:
X→Y,同时
Y∈X,则是平凡函数依赖。
非平凡函数依赖:
XF
Y,同时
Y∈/X,则是平凡函数依赖。
完全函数依赖:
X→Y,而且任何
X的真子集
X′,都没有
X′→Y
部分函数依赖:
XP
Y,而且任何
X的真子集
X′,存在至少一个
X′,
X′P
Y。
码
一个关系的所有属性。
候选码: 唯一标识一个关系的属性组
主码: 候选码多于一个,从候选码中选出的一个码作为主码。
主属性: 候选码的所有属性。
非主属性: 不包含在任何候选码中的属性
全码: 极端情况下,整个属性组都是码。
外码:
X不是该关系模式的码,但是
X是另一个关系模式的码。比如
(Sno,Cno,Grade)中的Sno不是码,但
Sno是
(Sno,Sname,Sage)的码,则
Sno是外码
范式
范式的作用是减少数据冗余和消除各种异常。
1NF
所有的关系模式都是1NF
2NF
在1NF的基础上,不存在部分函数依赖。
比如给出一个表:
(Sno,Sdept,Sloc,Cno,Grade)
其中
Sno学号,
Sdept是系,
Sloc是寝室地址,
Cno是课程号,
Grade是该学生某个课程的成绩。
(Sno,Cno)F
GradeSno→Sdept, (Sno,Cno)P
SdeptSno→Sloc, (Sno,Cno)P
Sloc
那么上述存在了部分函数依赖,需要把部分函数依赖的进行消除:
Sno→SdeptSno→Sloc
因此得出新的关系模式:
(Sno,Sloc,Sdept)(Sno,Cno,Grade)
3NF
在2NF的基础上,消除传递函数依赖。
传递函数依赖:
X→Y,
Y↛X,
Y→Z,则
Z传递依赖于
X。
比如上述的关系模式:
(Sno,Sloc,Sdept)
有
Sno→SlocSdept↛SnoSloc→Sdept
那么
Sdept函数传递依赖与
Sno。3NF需要消除这种模式。
(Sno,Sdept)(Sdept,Sloc)
BCNF
在3NF基础上,使得每一个决定因素都包含码。
给出一个BCNF的反例:
STJ(S,T,J)
其中
S是学生,
T是教师,
J是课程。所以有:
(S,J)→T(S,T)→JT→J
(S,J)和
(S,T)都是候选码。
T是决定因素,但是
T不包含码。
在只考虑函数依赖的情况下,BCNF是规范化程度最高的范式。
4NF
多值依赖: 设
R(U)是属性集
U上的一个关系模式,
X,Y,Z是
U的子集,且
Z=U−X−Y。当且仅当
R(U)的任一关系
r,给定的一对
(x,y)值,有一组
Y的值,这组值仅仅取决于
X的值而与
Z的值无关,则成
R(U)中的多值依赖
X→→Y成立。
平凡多值依赖: 若
X→→Y,而
Z=∅,则称
X→→Y为平凡多值依赖。
4NF: 关系模式
R<U,F>∈1NF,如果对于
R的每个非平凡多值依赖
X→→Y(
Y⊈X),X都含有码,则
R<U,F>∈4NF。