笔记——数据库系统概述——关系数据理论

关系数据理论

6.1问题的提出

​ 作为一个二维表,关系要符合一个最基本的条件:每一个分量必须是不可分的数据项。满足了这个条件的关系模式就属于第一范式(1NF)。

​ 数据依赖是一个关系内部属性与属性之间的一种约束关系。这种约束关系是通过属性间值的相等与否体现出来的数据间相关联系。数据依赖中最重要的是函数依赖FD和多值依赖MVD。

​ 数据冗余:数据在数据库中的重复存放称为数据冗余。冗余度大,不仅浪费存储空间,重要的是在对数据进行修改时易造成数据的不一致性。数据冗余是指数据大量的重复,使数据之间联系弱,不利于操作。会引起插入修改删除异常。
​ 更新异常:数据冗余,更新数据时维护数据完整性代价大。
​ 插入异常:无法插入某部分信息,该插的数据插不进去。
​ 删除异常:不该删除的数据不得不删除。
​ 一个好的数据模式应当不会发生插入异常、删除异常和更新异常,数据冗余应尽可能少。

6.2规范化

​ 通常按属性间依赖情况来区分关系规范化程度为第一范式、第二范式、第三范式和第四范式等。

​ 关系规范化的目的是控制冗余,避免插入和删除异常,从而增强数据库结构的稳定性和灵活性。

6.2.1函数依赖

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

​ 函数依赖和别的数据依赖一样是语义范畴的概念,只能根据语义来确定一个函数依赖。函数依赖是指关系模式的一切关系均要满足约束条件。

​ 非平凡的函数依赖:X->Y,但Y不是X的子集,则称X->Y是非平凡的函数依赖。
​ 设关系模式R(U),U是R上的属性集,X,Y是U的子集。如果X->Y,并且对于X的任何一个真子集Z,Z->Y都不成立,则称Y完全函数依赖于X(F);如果X->Y,并且对于X的某一个真子集Z有Z->Y成立,则称Y部分函数依赖于X(P)。

​ 设关系模式R(U),X,Y,Z是U的子集。如果X->Y,Y->X,且Y->Z成立,则称X->Z为传递函数依赖(传递)。
​ 若X->Y,则X称为这个函数依赖的决定属性组,也称为决定因素。
​ 若X->Y,Y->X,则记作X<- ->Y。

6.2.2码/键/键码

​ 设K为R<U,F>中的属性或属性组合,若U完全函数依赖于K,则K为候选码。如果U函数依赖于K,则称K为超码。候选码是一类特殊的超码,即候选码的超集(如果存在)一定是超码,候选码的任何真子集一定不是超码。如果候选码多于一个,则选定其中的一个为主码。包含在任何一个候选码中的属性称为主属性;不包含在任何候选码中的属性成为非主属性或非码属性。关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码,也称外码。主码与外码提供了一个表示关系间联系的手段。

6.2.3范式

​ 一个低一级范式的关系模式通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。

6.2.4 2NF

​ 第一范式中存在非主属性对于候选码的部分函数依赖。

​ 若R属于第一范式,且每一个非主属性完全函数依赖于候选码,则R属于第二范式。

6.2.5 3NF

​ 第二范式存在非主属性对于候选键的传递函数依赖。

​ 设关系模式R<U,F>属于第一范式,若R中不存在这样的码X,属性组Y及非主属性Z(Z不是Y的真子集)使得X->Y,Y->Z成立,Y/->X,则称R<U,F>为第三范式。

​ 如果R属于第二范式,且没有一个非主属性传递函数依赖于码,则R属于第三范式。

6.2.6 BCNF

​ 第三范式存在主属性对于候选键的函数依赖。

​ 通常认为BCNF是修正的第三范式,有时也称为扩充的第三范式。

​ 关系模式R<U,F>∈1NF,若X->Y且Y不是X的子集时X必含有码,则R<U,F>∈BCNF。也就是说,关系模式R<U,F>中,若每一个决定因素都包含码,则R<U,F>∈BCNF。

​ 一个满足BCNF的关系模式有:所有非主属性对每一个码都是完全函数依赖。所有主属性对每一个不包含它的码也是完全函数依赖。没有任何属性完全函数依赖于非码的任何一组属性。

6.2.7 4NF

​ 关系模式R<U,F>∈1NF,如果对于R的每一个非平凡多值依赖XY(Y不是X的子集),X都含有码,则称R<U,F>∈4NF。

​ 4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。如果对关系模式R中的函数依赖集中每个非平凡的函数依赖,都有X是R的超键,则R属于BCNF,但不一定属于4NF。如果对关系模式R,若其函数依赖集中所有候选关键字都是决定因素,则R的最高范式是4NF。

​ 多值依赖:设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=∅,则称其为平凡的多值依赖。多值依赖具有对称性,传递性。

6.2.8规范化小结

​ 规范化的基本思想是逐步消除数据依赖中不合适的部分,使模式中的各关系模式达到某种程度的“分离”,即“一事一地”的模式设计原则 。

​ 让一个关系描述一个概念、一个实体或者实体间的一种联系。若多于一个概念就把它“分离”出去。规范化实质上是概念的单一化。

6.3数据依赖的公理系统

​ 数据依赖的公理系统是模式分解算法的理论基础。对于满足一组函数依赖F的关系模式R<U,F>,其任何一个关系r,若函数依赖X->Y都成立,则称F逻辑蕴含X->Y。

​ Armstrong公理系统对关系模式R<U,F>来说有如下的推理规则:
​ 自反律:若Y是X的子集,X是U的子集,则X->Y为F所蕴含。
​ 增广律:若X->Y为F所蕴含,且Z是U的子集,则XZ->YZ为F所蕴含。
​ 传递律:若X->Y及Y->Z为F所蕴含,则X->Z为F所蕴含。
​ 合并规则:由X->Y,X->Z,有X->YZ。
​ 伪传递规则:由X->Y,WY->Z,有XW->Z。
​ 分解规则:由X->Y及Z是Y的子集,有X->Z。

​ 在关系模式R<U,F>中为F所逻辑蕴含的函数依赖的全体叫做F的闭包。

​ 设F为属性集U上的一组函数依赖,X、Y是U的子集,XF+={A|X->A能由F根据公理导出},XF+称为属性集X关于函数依赖集F的闭包。

​ 设F为属性集U上的一组函数依赖,X、Y是U的子集,X->Y能由公理导出的充分必要条件是Y是XF+的子集。
判定X->Y是否能由F根据公理导出的问题就转化为求出XF+,判定Y是否为XF+的子集的问题。XF+=U,X是关系模式的候选码。

​ 如果G+=F+,就说函数依赖集F覆盖G或F与G等价。两个函数依赖集等价是指它们的闭包等价。

6.4模式的分解

​ 函数依赖集合{X->Y|X->Y∈F+ ∩XY是Ui的子集}的一个覆盖Fi叫做F在属性Ui上的投影。

6.4.1模式分解的三个定义

​ 分解具有无损连接性。

​ 分解要保持函数依赖。

​ 分解既要保持函数依赖,又具有无损连接性。

6.4.2分解的无损连接性和保持函数依赖性

​ 无损连接性保证不丢失信息;保持函数依赖性减轻或解决各种异常情况。

6.4.3模式分解的算法

​ 若要求分解保持函数依赖,那么模式分离总可以达到3NF,但不一定能达到BCNF。

​ 若要求分解既保持函数依赖,又具有无损连接性,可以达到3NF,但不一定能达到BCNF。

​ 若要求分解具有无损连接性,那一定可达到4NF。

综合题题型:
分析关系模式R属于第几范式;

求属性集X在F上的闭包XF+:
1.令X(0)=X,i=0;
2.求B,对X(i)中的每个元素,依次检查相应的函数依赖,将依赖它的属性加入B;
3.X(i+1)=B∪X(i);
4.判断X(i+1)= X(i);
5.若X(i+1)与X(i)相等或X(i)=U,则X(i)就是XF+,算法终止;
6.若否,则i=i+1,返回第二步。

快速求候选码的方法:
首先对于给定的R(U)和函数依赖集F,可以将它的属性划分为4类:
L类,仅出现在F的函数依赖左部的属性。
R类,仅出现在F的函数依赖右部的属性。
N类,在F的函数依赖左部和右部均未出现的属性。
LR类,在F的函数依赖左部和右部两部均出现的属性。
根据以下定理和推论来求解候选码。
定理1:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类属性,则X必为R的任一候选码的成员。
推论1:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类属性,且X+包含了R的全部属性,则X必为R的唯一候选码。
定理2:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是R类属性,则X不在任何候选码中。

求与F等价的最小依赖集:
如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集,亦称为最小依赖集或最小覆盖。
(1)F中任一函数依赖的右部仅含一个属性。
(2)F中不存在这样的函数依赖X->A,使得F与F-{X-A}等价。即F中的函数依赖均不能由F中其他函数依赖导出。
(3)F中不存在这样的函数依赖X->A,X有真子集Z使得F-{X->A}∪{Z->A}与F等价。即F中各函数依赖左部均为最小属性集(不存在冗余属性)。
F的最小依赖集Fm不一定是唯一的,它与对各函数依赖FDi 及X->A中X各属性的处置顺序有关。

判断分解p是否保持函数依赖性;
保持函数依赖的定义:设p=(R1,R2…Rn)是R的一个分解,F是R上的FD集,如果满足πR1(F1)∪πR2(F2)∪πR3(F3)…∪πRn(Fn)与F等价,则表明p是保持函数依赖的分解。
判别一个分解的无损连接性:矩阵法
(1)多少个属性就有多少列,分解的模式有几个就有几行。每个模式有哪几个属性就在那几列填a,其他的填b。
(2)对每一个函数依赖,找到其左部对应的列,左部对应列的值相等的行;若这些行中右部属性对应的列里有a,则这些行全改为a,否则全部改为b。
特别的对一个关系模式R分解成两个关系模式R1,R2有:
R1和R2的属性集交的结果->两者的差在函数依赖的闭包中,则具有无损连接性。

将关系模式分解使其满足3NF并具有无损连接性和保持函数依赖性:
3NF的保持依赖性分解算法
算法1:分解为3NF,且保持依赖保持性。
算法输入:关系模式R与R的最小依赖集Fm;
算法输出:R的一个分解ρ=(R1,R2…Rn),Ri为3NF,且ρ具有依赖保持性。
具体步骤如下:
①如果Fm中有一个依赖X->A,满足XA=R,即输出ρ={R},转步骤④;
②如果R中某些属性与F中所有依赖的左部与右部都无关,则将他们构成一个关系模式,从R中分出去。
③对于Fm中的每一个Xi->Ai,都构成一个关系子模式Ri=XiAi;
④停止分解,输出ρ;
举例:
设有关系模式R<U,F>,其中U={C,T,H,R,S,G},F={CS->G,C->T,TH->R,HR->C,HS->R},保持函数依赖分解为3NF。
1)不存在有一个依赖X->A,满足XA=R,不满足算法1中条件①;
2)不存在某些属性与F中所有依赖的左部与右部都无关,不满足条件④;
3)对于F中的每一个Xi->Ai,都构成一个关系子模式,得到R1=CSG,R2=CT,R3=THR,R4=HRC,R5=HSR;

4)ρ={CSg,CT,THR,HRC,HSR};

3NF的无损连接与依赖保持分解
算法2:分解为3NF,使他既具有无损连接性,又具有依赖保持性;
输入:关系模式R,最小依赖集Fm;
输出:R的一个分解ρ=(R1,R2…Rn),Ri为3NF,具有无损连接性且ρ具有依赖保持性。
具体如下:
①根据算法1得到具有的依赖保持性分解ρ;
②检测ρ是否具有无损连接线,若是转④,否则继续③;
③求出R的候选码X,令ρ=ρ∪{X};
④停止分解,输出ρ;
举例:
设有关系模式R<U,F>,其中U={C,T,H,R,S,G},F={CS->G,C->T,TH->R,HR->C,HS->R},保持函数依赖分解且具有无损连接性的3NF。
1)根据算法1得到具有的依赖保持性分解ρ={CSg,CT,THR,HRC,HSR};
2 ) 检测ρ是否具有无损连接性;
3)不执行;
4)输出ρ;

将关系模式分解使其满足BCNF且保持无损连接性;
BCNF的无损连接分解
算法3:把关系模式分解为无损连接的BCNF
输入:关系模式R,最小依赖集Fm;
输出:R的一个分解ρ=(R1,R2…Rn),Ri为BCNF,具有无损连接性。
具体如下:
①令ρ=(R);
②如果ρ中所有模式都是BCNF,若是转④,否则继续③;
③若其中一个关系模式S不是BCNF,则S中必能找到一个函数依赖X->A,X不包含S的候选码,且A不属于X,设S1=XA,S2=S-A,用分解{S1,S2}代替S,转②;
④停止分解,输出ρ;
举例:
设有关系模式R<U,F>其中:U={C,T,H,R,S,G};F={CS->G,C->T,TH->R,HR->C,HS->R},将其分解为无损连接的BCNF.解:求得R的候选码为HS,
1)令ρ={CTHRSG};
2)ρ中模式不是BCNF(左部依赖并不是都包含HS),继续③;
3)在CS->G中,CS不包含HS,不满足BCNF,将ρ分解为CSG与CTHRS,转②。
ρ中模式为{CSG,CTHRS},关系CSG依赖为CS->G,满足bcnf,关系CTHRS依赖为C->T,TH->R,HR->C,HS->R(左部依赖并不是都包含候选码HS),不满足bcnf,继续分解关系CTHRS,关系CTHRS中选择C->T,C不包含关系CTHRS的候选码HS,同理分解为CT与CHRS,转②。
ρ中模式为{CSG,CT,CHRS},关系CT依赖为C->T,满足bcnf,关系CHRS依赖为CH->R,HR->C,HS->R(左部依赖并不是都包含候选码HS),不满足bcnf,继续分解关系CHRS,关系CHRS中选择CH->R,CH不包含关系CHRS的候选码HS,同理分解为CHR与CHS,转②。
ρ中模式为{CSG,CT,CHR,CHS},关系CHR依赖为CH->R,HR->C,满足bcnf,关系CHS依赖为HS->C满足bcnf转④。
④停止分解,输出ρ={CSG,CT,CHR,CHS};

通过阅读题干写出模式R的基本FD和关键码,判断R最高属于第几范式,将R规范到3NF。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值