属性间的联系
1.一对一联系
2.一对多联系
3.多对多联系
数据依赖
是一个关系内部属性与属性之间的一种约束关系
是现实世界属性间相互联系的抽象
是数据内在的性质 是语义的体现
1.函数依赖
2.多依赖
例:描述一个学生关系,可以有学号、姓名、系名等属性。
一个学号只对应一个学生,一个学生只在一个系中学习 “学号”值确定后,学生的姓名及所在系的值就被唯一确定。
现给出一个关系模式找出其问题:
U ={Sno, Sdept, Mname, Cno, Grade}
F={Sno→Sdept, Sdept→ Mname, (Sno, Cno)→ Grade}
(1)数据冗余
(2)更新异常
(3)插入异常
(4)删除异常
把这个单一的模式分成三个关系模式:
S(Sno,Sdept,Sno → Sdept);
SC(Sno,Cno,Grade,(Sno,Cno) → Grade);
DEPT(Sdept,Mname,Sdept → Mname);
这三个模式都不会发生插入异常、删除异常的问题,数据的冗余也得到了控制。
平凡函数依赖与非平凡函数依赖
X→Y,但Y⊈X则称X→Y是非平凡的函数依赖。
X→Y,但Y⊆X 则称X→Y是平凡的函数依赖。
例:在关系SC(Sno, Cno, Grade)中,
非平凡函数依赖: (Sno, Cno) → Grade
平凡函数依赖: (Sno, Cno) → Sno
(Sno, Cno) → Cno
多值依赖
定义:设R(U)是属性集U上的一个关系模式,X,Y,Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖X→→Y成立,当且仅当R(U)的任一关系r,给定一对(x,z)值,有一组Y值,这组值仅仅决定于x值而与z值无关。
若x→→Y而Z=∅,则成为X→→Y为平凡多值依赖。
多值依赖具有以下性质:
(1)多值依赖具有对称性。即若X→→Y则X→→Z,其中Z=U-X-Y。
(2)多值依赖具有传递性。即若X→→Y,Y→→Z,则X→→Z-Y。
(3)函数依赖可以看做是多值依赖的特殊情况。即若X→Y,则X→→Y。
(4)若X→→Y,X→→Z,则有X→→YZ。
(5)若X→→Y,X→→Z,则有X→→Y∩Z。
(6)若X→→Y,X→→Z,则有X→→Y-Z,X→→Z-Y
多值依赖于函数依赖相比,具有两个基本的区别
(1)多值依赖的有效性与属性集的范围有关。
(2)若函数依赖X→Y在R(U)上成立,则对于任何Y'包含于Y,均由X→Y‘成立。而多值依赖X→→Y若在R(U)上成立,却不能断言对于任何Y‘包含于Y有X→→Y’成立。
4NF(消除非平凡且飞函数依赖的多值依赖)
定义:关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y不属于X),X都含有码,则称R<U,F>∈4NF。
规范化小结
规范化的基本思想是逐步消除数据依赖中不合适的部分。使模式中的各个关系模式达到某种程度的”分离“,即”一事一地“的模式设计原则。让一个关系描述一个概念、一个实体或者实体间的一种联系。若多于一个概念就把它”分离“出去。因此,所谓规范化实质上就是概念的单一化。
1NF→(消除非主属性对码的部分函数依赖)→2NF→(消除非主属性对码的传递函数依赖)→3NF→(消除主属性对码的部分与传递函数依赖)→BCNF→(消除非平凡且非函数依赖的多值依赖)→4NF
关系模式的规范化过程是通过对关系模式的分解来实现的。把低一级的关系模式分解为若干个高一级的关系模式。这种分解不是唯一的。
完全函数依赖与部分函数依赖
在关系SC(Sno, Cno, Grade)中,有:
由于:Sno ↛Grade,Cno ↛ Grade,
因此:(Sno, Cno) → Grade (Sno,Cno)→Sdept是部分函数依赖
因为Sno →Sdept成立,且Sno是(Sno,Cno)的真子集
传递函数依赖
在关系Std(Sno, Sdept, Mname)中,有:
Sno → Sdept,Sdept → Mname, Mname传递函数依赖于Sno。
范式
第一范式(1NF)
第二范式(2NF)
第三范式(3NF)
BC范式(BCNF)
第四范式(4NF)
第五范式(5NF)
2NF
若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF
例:
S-L-C(Sno,Sdept,Sloc,Cno,Grade)
(Sno,Cno)→Grade,Sno→Sdept,
(Sno,Cno)→Sdept,Sno→Sloc,
(Sno,Cno)→Sloc,Sdept→Sloc
S-L-C的码为(Sno,Cno)
S-L-C满足第一范式。
非主属性Sdept、Sloc并不完全依赖于码
关系模式S-L-C不属于2NF
产生问题:
插入异常
删除异常
修改复杂
3NF
设关系模式R<U,F>∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z(Z ⊇ Y), 使得X→Y,Y→Z成立,Y ↛ X不成立,则称R<U,F> ∈ 3NF。
例:2NF关系模式S-L(Sno, Sdept, Sloc)中 函数依赖:
Sno→Sdept
Sdept → Sno
Sdept→Sloc
可得:Sno→Sloc,即S-L中存在非主属性对码的传递函数依赖,S-L 不属于3NF
BCNF
设关系模式R<U,F>∈1NF,若X →Y且Y 不含于 X时X必含有码,则R<U,F>∈BCNF。
换言之,在关系模式R<U,F>中,如果每一个决定属性集都包含候选码,则R∈BCNF。
例子:关系模式SJP(S,J,P)中,S是学生,J表示课程,P表示名次。
每一个学生选修每门课程的成绩有一定的名次,每门课程中每一名次只有一 个学生(即没有并列名次)。
由语义可得到函数依赖:
(S,J)→P;(J,P)→S
(S,J)与(J,P)都可以作为候选码。
关系模式中没有属性对码传递依赖或部分依赖,所以SJP∈3NF。
4NF
不允许有非平凡且非函数依赖的多值依赖。 允许的非平凡多值依赖实际上是函数依赖。
小结