第6章:关系数据库理论(考研重点)

时间:2020-05-21 09:40:58   收藏:0   阅读:184

第6章:关系数据库理论(考研重点)

代码是基于SQLServer学习,与MySQL有略微差别!
考研复试或者考研科目中可能会考!

6.1、问题的提出

举例:

设计一个数据库,只有一个关系模式:

一个好的关系数据库模式应该具备以下四个条件:

  1. 尽可能少的数据冗余。
  2. 没有插入异常。
  3. 没有删除异常。
  4. 没有更新异常。

问题的解决方案:

这样是否能解决问题?理论基础是什么?

答:能,关系的规范化理论

6.2、规范化

6.2.1、关系的规范化概述

关系模式可以形式化的表示为
R(U, D, dom, F)

字母 含义
R 关系名
U 组成该关系的属性名集合
D 属性组U中属性所来自的域的集合
dom 属性向域的映像集合
F 属性间数据依赖的集合

在本章中关系模式简记为R(U, F)

6.2.2、数据依赖

数据依赖:关系模式中的各属性之间相互依赖、相互制约的联系
数据依赖是语义的体现

模式分解的目的就是消除不好的函数依赖(部分函数依赖、传递函数依赖)

建立一数据库来存储教务有关信息:

U={ Sno,Sdept,Mname,Cno,Cname,Grade }
数据库的语义: 
一个学生只属于一个系,一个系有若干学生;
Sdept = f(Sno) (Sno --> Sdept)
一个系只有一名系主任;
Sdept --> Mname
一个学生可以选修多门课程, 每门课程有若干学生选修;每个学生所学的每门课程都有一个成绩。
(Sno, Cno) --> Grade
F={ Sno-->Sdept, Sdept-->Mname,(Sno, Cno)-->Grade }

数据依赖一般分为

其中,函数依赖是最重要的数据依赖。

6.2.3、函数依赖

定义设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系 r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作X → Y

Y函数依赖于X 等价于下面:

对于关系模式:SCD{ SNO,SN,AGE,DEPT,MN,CNO,SCORE }

几个术语和记号

函数依赖的几点说明

1、函数依赖是语义的体现,我们只能根据语义来确定一个函数依赖。

对于关系模式:SC{SNO, SN, AGE, CNO, SCORE}

2、平凡的函数依赖与非平凡的函数依赖。

当属性集Y是属性集X的子集时,则必然存在着函数依赖X→Y,这种类型的函数依赖称为平凡的函数依赖。

如果Y不是X的子集,则称X→Y为非平凡的函数依赖。

对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义,因此若不特别声

明, 我们总是讨论非平凡函数依赖。

3、函数依赖与属性之间的联系类型有关。

在一个关系模式中,如果属性X与Y有1:1联系时, 则存在函数依赖X→Y, Y→X, 即X←→Y。

在一个关系模式中,如果属性Y与X有1:m的联系时,则存在函数依赖X→Y。

所以在确定属性间的函数依赖关系时,可以从分析属性间的联系类型入手,便可确定属

性间的函数依赖。

函数依赖的基本性质

1、传递性

2、扩张性

3、合并性

4、分解性

完全函数依赖、部分函数依赖、传递函数依赖

(重点)定义

6.2.4、码

例:

S(Sno, Sname, Sdept ),  
Sno 是码,Sno主属性。
非主属性:Sname, Sdept
SC(Sno,Cno,G)
(Sno ,Cno)是码,  所以Sno与Cno是主属性,
G是非主属性。 

6.2.5、范式

针对同一个数据库问题不同的人设计出来的关系模式不完全相同。

Q:用什么标准来衡量关系模式的好坏?

A:范式

范式的种类:

1、第一范式(1NF)

2、第二范式(2NF)

3、第三范式(3NF)

4、BC范式(BCNF)

5、第四范式(4NF)

6、第五范式(5NF)

各种范式之间存在联系:

5NF ? 4NF ? BCNF ? 3NF ? 2NF ? 1NF

某一关系模式R为第n范式,可简记为R ∈ nNF

规范化:一个属于低一级范式的关系模式,通过分解可以转化为若干个属于高一级范式的关系模式。这个过程就是规范化。

1NF

1NF的定义:如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。

例: 关系模式 SLC

Sno:学号;Sn:学生姓名;Dno:系别号;Dloc:系的位置;Dn:系名;Cno:课程编号;Cn:课程名称;Grade:分数;

2NF

2NF的定义:若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则R∈2NF。

2NF的定义还可以等价如下内容:

从1NF到2NF:消除非主属性对码的部分函数依赖

(Sno, Cno)→F Grade

(Sno, Cno)→P Dno

(Sno, Cno)→P Dn

(Sno, Cno)→P Cn

(Sno, Cno)→P Dloc

(Sno, Cno)→P Sn

投影分解法:

SLC(Sno,Sn,Dno,Dn,Dloc,Cno,Cn,Grade)
分解为如下三个关系模式

都属于2NF,将一个1NF关系模式分解为多个2NF的关系模式,并不能完全消除关系模式中的数据冗余和各种异常情况

3NF

3NF的定义:关系模式R(U, F)中若不存在这样的码X、属性组Y及非主属性Z(Z Y), 使得X→Y, Y? X, Y→ Z成立,则称R(U,F)∈3NF

3NF的定义还可以等价如下内容:

如果关系模式R中不存在非主属性部分函数依赖于码, 也不存在非主属性传递函数依赖于码, 则称模式R∈3NF

其实也就是说关系R中的所有非主属性都完全函数依赖于码,也直接函数依赖于码;

从3NF中我们可以得到如下结论:

1、结论一:

如果关系模式R ∈ 3NF,则R中每一个非主属性完全函数依赖于码。

2、结论二:

如果关系模式R ∈ 3NF,则R中每一个非主属性不传递函数依赖于码

3、结论三:

如果关系模式R中每一个非主属性既不部分函数依赖于码也不传递函数依赖于码,则R ∈ 3NF

例如:SLC(Sno,Sn,Dno,Dn,Dloc,Cno,Cn,Grade)
分解为如下三个关系模式

都属于2NF,其中对于关系模式SD,

Sno→Dno,Dno→Dn,Dno ? Sno,Dn传递函数依赖于Sno。所以SD不属于3NF

对上面SD分解(投影分解)

都属于3NF,解决了冗余异常问题

1)设计数据库存储如下信息:
信息:学生(Sno, Sn),教师(Tno, Tn),课程(Jno, Jn)。

2)设计关系模式。

STJ中的函数依赖:

3)STJ(Sno, Jno, Tno)属于几范式 答:3NF
STJ中的数据依赖

STJ中的候选码

STJ(Sno, Jno, Tno)存在问题:

  1. 假设刘老师(T1)教数据库(J1),有200个学生选修刘老师教的数据库,J1和T1的联系将出现200次
  2. 学生选课前,J1和T1的联系不能体现在数据库中。
    (Sno,Tno)和(Sno,Jno)为候选码

在STJ中出现的问题表明需要更高级别的范式进行模式分解!

在实际工作建表的过程中,达到 3NF 即可!

BCNF

BCNF的定义:

对于关系模式STJ(Sno,Jno,Tno) ,候选码:(Sno,Tno), (Sno,Jno)
STJ中的数据依赖

对于Tno→Jno,但Tno中不含有码,STJ不属于BCNF。

从BCNF范式中,可以得出以下结论:

1、结论一:如果R ∈ BCNF,则R ∈ 3NF。

2、结论二:R ∈ BCNF,则R中不存在主属性对不包含该主属性的码的部分函数依赖。

下面尝试进行模式分解:

方案一:

把STJ(Sno, Jno, Tno)分解

分解不合理,原先的语义丢失

举例:在SJ(Sno,Jno)中,学生S1选了J1这门课,但是一门课可以被多个老师教,也就造成了学生S1选的J1这门课不知道是哪位老师教的。

方案二:

把STJ(Sno, Jno, Tno)分解

对于TJ ( Tno, Jno )

对于ST ( Sno, Tno)

解决了STJ中存在的问题。

如果上面的定义看蒙了,可以直接记住这些范式的要求即可:

前3个范式都是对非主属性进行讨论的

总结:

1NF:关系模式中的所有属性列都是不可再分的数据项

2NF:每一个非主属性都完全函数依赖于码

3NF:每一个非主属性既完全函数依赖于码也直接函数依赖于码

BCNF:每一个主属性对不包含该主属性的码要完全函数依赖,主属性对码要直接函数依赖

4NF:对于每个多值依赖X→→Y (U-X-Y ≠ ? 且Y ? X),则必有函数依赖X→Y

6.2.6、多值依赖

∈ BCNF的关系模式是否完美呢?

? 如果一个关系数据库中所有关系模式都属于BCNF,那么在函数依赖的范畴内,已经实现了模式的彻底分解,消除了异常的根源,而且数据冗余也减少到极小程度但在其他数据依赖的范畴内有可能仍然存在问题。多值依赖

设计数据库存储如下信息

关系模式

数据:

考虑CTB(Cno, Tno, Bno)对应的关系中有多少元组?12个

技术图片
技术图片

在关系模式CTB中,码是什么?

技术图片
所以得出结论,在关系模式CTB中,码为全码(Cno,Tno,Bno)

关系模式CTB(Cno, Tno, Bno)的候选码:

CTB(Cno, Tno, Bno)属于第几范式

如下是在CTB关系模式中插入的一些数据:

技术图片

CTB(Cno, Tno, Bno)存在的问题

对于关系模式CTB(Cno, Tno, Bno)在函数依赖的范畴内不存在任何问题。

但CTB存在不合理的多值依赖,只有消除这些不合理的多值依赖才能 ∈ 4NF。

(Cno,Tno)与Bno之间有什么样的制约联系?

多值依赖的定义:设R(U)是一个属性集U上的一个关系模式, X、Y和Z是U的子集,并且Z=U-X-Y,多值依赖X→→Y成立,当且仅当对R的任一关系r,r在(X,Z)上的每个值对应一组Y的值,这组值仅仅决定于X值而与Z值无关。

对于(X, Z)上的一些值,只要X部分相等,不管Z部分取何值, Y都有相同的一组值与之对应,就有X→→Y 。( Z=U-X-Y )

1、CTB(Cno,Tno,Bno),考虑Bno是否多值依赖Cno?yes

课程号对应一组的参考书,而与老师无关,也就是说不管哪个老师来教哪门课程,参考书是不变的;

2、CTB(Cno, Tno, Bno)有没有Tno多值依赖Cno?yes

课程号对应一组老师,而与参考书无关,也就是说教哪门课的老师是固定的,与选取哪些参考书无关;

3、对于关系模式CTB(Cno, Tno, Bno),假设不同的老师教同一门课时可以使用不同的参考书,这时有没有Bno多值依赖Cno?no

根据定义来判断,教同一门课使用不同的参考书,不是多值依赖;

多值依赖的另一个等价的形式化的定义:

在R(U)的任一关系r中, 如果存在元组t, s使得t[X]=s[X], 那么就必然存在元组w, v ∈ r, 使得w[X]=v[X]=t[X],而w[Y]=t[Y], w[Z]=s[Z], v[Y]=s[Y], v[Z]=t[Z], 则Y多值依赖于X, 记为X→→Y。 这里X, Y是U的子集, Z=U-X-Y。

定义的理解(重点理解): 对r中任意两个元组t和s, 若t[X]=s[X], 那么交换t, s的Y值部分得到的两个元组也在r中。

多值依赖的性质

1、假设Z=U-X-Y = ?,则肯定有X→→Y。这样的多值依赖称为平凡的多值依赖。

2、如果 X→→Y,并且Z=U-X-Y ≠ ?。这样的多值依赖称为非平凡的多值依赖。

3、如果X→Y,则肯定有X→→Y。(有函数依赖必然有多值依赖)

4、如果Y ? X,则肯定有X→→Y。(平凡的函数依赖必然是多值依赖)**

注意:当Z = U -X-Y = ? 或者Y ? X时,肯定有X→→Y,对于这样的多值依赖我们一般不讨论。

多值依赖与函数依赖的区别

4NF

4NF的定义:关系模式R(U, F) ∈ 1NF,如果对R的每一个多值依赖X →→ Y(U-X-Y ≠ ? 且Y ? X),X都含有码,则称R ∈ 4NF。

4NF:对于每个非平凡的多值依赖必是函数依赖

由第四范式可得知如下结论:

1、结论1:如果一个关系模式R ∈ 4NF,则必有R ∈ BCNF。

2、结论2:如果一个关系模式R ∈ 4NF, 对于每个多值依赖X →→ Y (U-X-Y ≠ ? 且 Y ? X),则必有函数依赖X → Y 。

注意:只有消除不是函数依赖的多值依赖X→→Y(U-X-Y ≠ ?且Y ? X) ,一个关系模式才可以∈4NF。

e.g:关系模式

关系模式CTB(Cno, Tno, Bno)的候选码:全码

对关系模式CTB(Cno, Tno, Bno)进行分解

对于CT(Cno,Tno)

对于CB(Cno,Bno)

规范化

规范化的基本思想:

6.3、数据依赖的公理系统

主要是讲函数依赖的公理系统

6.3.1、逻辑蕴含

逻辑蕴含的定义:对于满足一组函数依赖F的关系模式R<U,F>,其任何一个关系r,若函数依赖X→Y都成立, 则称F逻辑蕴含X→Y

例如:

在R<U, F>中,其中U={A, B, C}, F={A→B,B→C} 。
A→C:被F逻辑蕴含
A→BC:被F逻辑蕴含
A→A:被F逻辑蕴含(平凡的函数依赖)
A→B:被F逻辑蕴含
B →A:不被F逻辑蕴含

6.3.2、Armstrong公理系统

对于关系模式R<U,F>来说有以下的推理规则:

Armstrong公理系统的有效性与完备性

自反律、增广律、传递律的证明

1、自反律:若Y ? X ?U,则X→Y为F所蕴含。

2、增广律:若X→Y为F所蕴含,且Z?U,则XZ→YZ为F所蕴含。

3、传递律:若X→Y及Y→Z为F所蕴含,则 X→Z为 F所蕴含。

根据Armstrong公理系统的A1,A2,A3这三条推理规则,可以得到下面三条比较有用的推理规则

引理6.1:X → A1 A2… Ak 成立的充分必要条件是X → Ai ( i=1,2, …, k)成立。

F+(函数依赖集)的闭包

F+的定义:在关系模式R<U,F>中为F所逻辑蕴含的函数依赖的全体叫作F的闭包,记为F+

例1:
技术图片

例2:
技术图片

F+是函数依赖的集合,而X+F是X关于F属性集的集合

属性集X关于函数依赖集F的闭包(X+F

例1:
技术图片

F+与X+ F的区别

引理6.2:设F为属性集U上的一组函数依赖, X, Y ? U, X→Y能由F根据Armstrong公理导出的充分必要条件是Y ? X+ F

证明:
技术图片

用途:将判定 X→Y 是否能由 F 根据Armstrong公理导出的问题,就转化为求出X+ F,判定Y是否为X+ F的子集的问题

通过算法求 X+ F

求属性集X(X ? U)关于U上的函数依赖集F的闭包X+ F 的算法思想。(迭代)

算法6.1:求属性集X(X ? U)关于U上的函数依赖集F的闭包X+ F

技术图片

练习:通过X+ F,可以用来验证X是否关系模式R的候选码

已知关系模式R(U, F),U={A,B,C,D,E}, F={AB→C, B→D, C→E, EC→B, AC→B}

(1) U函数依赖AB

(2) U不函数依赖AB的任一真子集

函数依赖集等价

定义6.14:如果G+=F+,就说函数依赖集F覆盖G(F是G的覆盖,或G是F的覆盖),或F与G等价。

引理6.3:F+=G+的充分必要条件是F ? G+和G ? F+

要证明该引理要用到下面两个结论:

  1. 结论一:F和G为函数依赖集, F ? G, 则有X+ F ? + G
  2. 结论二:G为函数依赖集,则G+= (G+)+

定义6.15:如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集。亦称为最小依赖集或最小覆盖。

  1. F中任一函数依赖的右部仅含有一个属性。(右侧是单个属性)
  2. F中不存在这样的函数依赖X→A,使得F与F - {X→A}等价。(不存在多余的函数依赖)
  3. F中不存在这样的函数依赖X→A,X有真子集Z使得F-{X→A}∪{Z→A}与F等价。(左侧不能有多余的属性)

定理6.3:每一个函数依赖集 F 均等价于一个极小函数依赖集 Fm。此 Fm 称为F的最小依赖集。

技术图片

重点:如何求极小函数依赖集(也就是证明Fm和F是等价的过程)

证:构造性证明,依据定义分三步对F进行“极小化处理”,找出F的一个最小依赖集。

(1)、右部 分解:

逐一检查F中各函数依赖:X→Y,

若Y=A1A2 …Ak,k ≥ 2

则用{X→Aj | j=1, 2, …, k}来取代X→Y。

(引理6.1 保证了F变换前后的等价性)

(2)、去掉多余的依赖:

逐一检查F‘ 中各函数依赖:X→A,

令G = F‘ - {X→A},

若A ∈ XG+, 则从F‘ 中去掉此函数依赖。

(3)、 去掉左部多余的属性:

逐一取出F‘‘中各函数依赖: X→A, 设X=B1B2…Bm

逐一考查Bi (i=l,2,…,m),

若A ∈ (X-Bi)F‘‘+ ,则以(X-Bi) →A 取代X →A 。

找关系模式R中的所有候选码

设关系模式R(U, F)

技术图片
技术图片

一般做这类题的步骤:

1、将函数依赖极小化处理

2、找出所有的候选码

3、判断达到第几范式

4、进行模式分解,达到3NF

6.4、模式的分解(未学)

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!