一个关系模式应该是一个五元组
R ( U , D , D O M , F ) R(U,D,DOM,F) R(U,D,DOM,F)
这里:
–关系名R是符号化的元组语义。
–U为一组属性。
–D为属性组U中的属性所来自的域
–DOM为属性到域的映射
–F为属性组U上的一组数据依赖
人们已经提出了许多种类型的数据依赖,其中最重要的是函数依赖和多值依赖。
例题:
建立一个描述学校教务的数据库,该数据库涉及的对象包括学生的学号,所在系,系主任姓名,课程号和成绩。假设用一个单一的关系魔术师来表示,则该关系模式的属性集合为:
U={Sno,Sdept,Mname,Cno,Grade}
得到的函数依赖是:
F={ 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, ( S n o , C n o ) → G r a d e (Sno,Cno) \rightarrow Grade (Sno,Cno)→Grade}
但是这样单一的一个表会出现很多问题:
比如说:数据冗余,更新异常,插入异常,删除异常。
这是因为这个模式的数据依赖存在一些不好的性质。把他改造一下得到
S(Sno,Sdept, S n o → S d e p t Sno \rightarrow Sdept Sno→Sdept);
SC(Sno,Cno,Grade, ( S n o , C n o ) → G r a d e (Sno,Cno) \rightarrow Grade (Sno,Cno)→Grade);
DEPT(Sdept,Mname, S d e p t → M n a m e Sdept \rightarrow Mname Sdept→Mname);
1. x → y x \rightarrow y x→y,但 y ⊈ x y \nsubseteq x y⊈x,则称 x → y x \rightarrow y x→y是非平凡的函数依赖。
2. x → y x \rightarrow y x→y,但 y ⊆ x y \subseteq x y⊆x,则称 x → y x \rightarrow y x→y是平凡的函数依赖。对于任意关系模式,平凡函数依赖是必然成立的,它不反映新的语义。
3.若 x → y x \rightarrow y x→y,则x称为这个函数依赖的决定属性组,也称为决定因素
4.若 x → y x \rightarrow y x→y, y → x y \rightarrow x y→x,则记做 x ← → y x \leftarrow\rightarrow y x←→y
5.若y不函数依赖于x,则记做 x ↛ y x \nrightarrow y x↛y
定义6.2:
在R(U)中,如果 x ← y x \leftarrow y x←y,并且对于x的任意一个真子集x1,都有 x 1 ↛ y x1 \nrightarrow y x1↛y,则称y对x完全函数依赖,记做 X → F Y X \overset F \rightarrow Y X→FY
定义6.3:
在R(U)中,如果 x ↛ y x \nrightarrow y x↛y( y ⊈ x y \nsubseteq x y⊈x), y ↛ x y \not\rightarrow x y→x, y ↛ z y \nrightarrow z y↛z, z ⊈ y z \nsubseteq y z⊈y则称z对x传递函数依赖。记为 x ⟶ 传 递 y x \overset {传递} \longrightarrow y x⟶传递y。
定义6.4
设K为R中的属性或属性组合。若K → U,则K称为R的一个候选码
如果U部分函数依赖于K,即K → U,则K称为超码。
候选码是最小的超码,即K的任意真子集都不是候选码。
若关系模式R有多个候选码,则选定其中的一个做为主码。
包含在任何一个候选码中的属性 ,称为主属性,不包含在任何码中的属性称为非主属性。
整个属性组是码,称为全码。
对于各种范式之间的关系有
5 N F ⊂ 4 N F ⊂ B C N F ⊂ 3 N F ⊂ 2 N F ⊂ 1 N F 5NF \subset 4NF \subset BCNF \subset 3NF \subset 2NF \subset 1NF 5NF⊂4NF⊂BCNF⊂3NF⊂2NF⊂1NF
例6.4 有关系模式S-L-C(Sno,Sdept,Sloc,Cno,Grade)。其中Sloc为学生的住处,并且每个系的学生住在同一个地方。则函数依赖:
( S n o , C n o ) → F G r a d e (Sno,Cno) \overset F \rightarrow Grade (Sno,Cno)→FGrade
S n o → S d e p t Sno \rightarrow Sdept Sno→Sdept , ( S n o , C n o ) → p S d e p t (Sno,Cno) \overset p \rightarrow Sdept (Sno,Cno)→pSdept
S n o → S l o c Sno \rightarrow Sloc Sno→Sloc, ( S n o , C n o ) → p S l o c (Sno,Cno) \overset p \rightarrow Sloc (Sno,Cno)→pSloc,
S d e p t → S l o c Sdept \rightarrow Sloc Sdept→Sloc(每个系的学生只住在同一个地方)
一个关系如果不属于2NF,就会产生以下几个问题:
(1)插入异常。如果要插入一个学生但是这个学生还没有选课那么就无法插入,这样不符合需求
(2)删除异常。如果某个学生只选了一门课,如果这门课他决定不选了那么这个课程就要删除,因为课程是主属性所以删除了它那么整个元组都会删除,从而造成删除异常。
(3)修改复杂。修改的数据重复如果要修改一个数据时那么要连续修改许多次。
解决这些问题那么达到2NF
定义6.7:
设关系模式R属于1NF,若R中不存在码X,属性组Y及非属性z使得 x → y x \rightarrow y x→y, y → z y \rightarrow z y→z成立, y ↛ x y \nrightarrow x y↛x,则称R属于3NF。
也就是要达到3NF的话就必须在2NF的基础上去除传递函数依赖
BC范式通常认为是修正的第三范式,在第三范式的条件上添加了一些条件
定义6.8:
关系模式R中,若 x → y x \rightarrow y x→y且 y ⊄ x y \not\subset x y⊂x时必包含码,则
R < U , F > ⊄ B C N F R \not\subset BCNF R<U,F>⊂BCNF
也就是说,关系模式R中,若每一个决定因素都包含码,则 R < U , F > ⊂ B C N F R \subset BCNF R<U,F>⊂BCNF。
一个满足BCNF的关系有:
1.所有非主属性对每一个码都是完全函数依赖。
2.所有主属性对每一个不包含它的码也是完全函数依赖。
3.没有任何属性完全函数依赖与非码的任何一组属性。
定义6.9:
设R(U)是属性集U上的一个关系模式。X,Y,Z是U的子集,并且Z=U-X-Y。
关系模式R(U)中多值依赖 X → → Y X \rightarrow\rightarrow Y X→→Y 成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而于z的值无关。
多值依赖具有对称性: 若 X → → Y X \rightarrow\rightarrow Y X→→Y,则 X → → Z X \rightarrow\rightarrow Z X→→Z,其中Z=U-X-Y。
多值依赖具有传递性: 若 X → → Y X \rightarrow\rightarrow Y X→→Y, Y → → Z Y \rightarrow\rightarrow Z Y→→Z,则 X → → Z X \rightarrow\rightarrow Z X→→Z。
4NF是在BCNF的基础上增加一个条件。不允许出现非平凡且非函数的多值依赖。
定义6.10:
关系模式 R < U , F > ⊂ 1 N F R \subset 1NF R<U,F>⊂1NF,如果对于R的每个非平凡的多值函数依赖 X → → Y X \rightarrow\rightarrow Y X→→Y,x都含有码,则称 R < U , F > ⊂ 4 N F R \subset 4NF R<U,F>⊂4NF
如果一个关系模式是4NF,则必为BCNF。