模式分解

发布时间:2021-04-19 09:01
最后更新:2021-04-19 09:01
所属分类:
架构知识 数据库设计

模式分解就是将一个大的关系模式RU,F分解为若干小的关系模式。模式分解的过程就是一个系统进行设计时其数据结构和数据结构的设计过程。

模式分解
关系模式RU,F的分解是指R被它的一组子集ρ={R1U1,F1,R2U2,F2,,RnUn,Fn}所替代的过程。其中U=U1U2Un,并且对于任何1i,jn,均存在UiUjFiFUi上的投影,也就是Fi={XY|XYF+XYUi}

键也称为码,是用来标识其他元组的属性集。通常有以下几种类型。

  • 超键(超码),在关系模式中能唯一标识元组的属性集。
  • 候选键(候选码),在关系模式中,能唯一标识元组并且不包含多余属性的属性集。
  • 主键(主码),在关系模式中的若干个候选键中随意指定的一个候选码作为关键字,这个关键字即为主键。
  • 外键,如果一个关系模式R中的属性F是其他关系模式的主键,那么F在模式R中就被称为外键。

从以上定义可以看出来,主键、候选键和超键之间存在着包含关系:

闭包

这里的闭包不是各个编程语言中的闭包,它所指代的意义是关系模式中所有属性集关系的推导结果。以下是闭包的定义。

闭包
α为一个属性集,由α确定的的所有属性的集合,即为α的闭包,记为α+

闭包的意义在于如果α+中包含关系模式R中的所有属性,那么属性集α就是R的超键。

闭包的示例
例如有一个依赖集:F={AB,BC}。那么F+就为以下集合{AB,AC,ABA,ABB,ABC,,ABCABC}

Armstrong公理

一个依赖集的闭包的推算可以通过Armstrong公理来计算。Armstrong公理是一系列的函数依赖推导规则,由三种原始公理和三个补充定律组成。

  • 自反律:若βα,则αβ
  • 增补律:若αβ,则γαγβ
  • 传递律,若αββγ,则αγ
  • 合并律:若αβαγ成立,则αβγ成立。
  • 分解率:若αβγ成立,则αβαγ成立。
  • 伪传递率:若αβγβδ成立,则αγδ成立。

现在可以用以上六个定律尝试推导一下前面的示例。

无损连接和函数依赖保持的判定

关系模式的分解必须遵循以下两个准则:

  1. 无损连接:信息不能发生增减,保证不失真。
  2. 保持函数依赖:不破坏属性间存在的依赖关系。

无损连接

无损连接
ρ={R1U1,F1,R2U2,F2,,RnUn,Fn}RU,F的一个分解,如果对于RU,F的任何一个关系r均有r=mp(r)成立,则分解ρ具有无损连接性。

无损连接其实比较好理解,关系模式在分解成比较小的关系模式以后,通过投影、连接以后仍能恢复原来的关系模式,也就是没有丢失信息,则这个分解被称为无损分解,否则就是损失分解。

对于无损分解的检验,一般可以使用以下技巧来进行:如果关系模式R=U,F被分解为ρ={R1,R2},那么如果R1R2=R1R2或者R1R2=R2R1,那么这个分解ρ就是无损分解。换句话说,R1R2R1或者R2的超键,那么就可以判定分解是无损分解。

如果分解出的关系模式超过两个,例如ρ={R1,R2,R3},那么就不能采用上述的方法进行快速检验了,只能采用表格列举法来逐个依赖进行推导。

函数依赖保持

函数依赖保持
F+=(i=1kFi)+,则RU,F的分解ρ={R1U1,F1,R2U2,F2,,RnUn,Fn}保持函数依赖。

简而言之,函数依赖保持实际上就是F=F1F2Fn,即两者的闭包相等。

对于函数依赖保持的快速判定可以采用以下技巧来进行:如果F上的每一个函数依赖都在其分解后的某一个关系上成立,则这个分解是保持依赖的。

范式

范式是符合某种基本的关系模式的集合。在日常工作中比较经常听到的是第一范式、第二范式、第三范式和BC范式。这四种范式是递进严格的,并且BCNF3NF2NF1NF

更加严格的范式还有第四范式(4NF)和第五范式(5NF),但是它们的规定过于严格,虽然有利于使数据结构达到最简,但是并不一定对日常的查询提供优化,所以在日常设计中很少使用。

第一范式(1NF)

如果关系模式R的每个关系r的属性都是不可再分的原子值,那么关系模式R就是第一范式的模式。用最简单的话说,第一范式对于数据库的设计要求是数据表的每一行都没有重复的数据(冗余数据)。

在实际的数据库结构设计中,第一范式也常常被违反,因为必要的冗余数据可以提高数据库的查询速度,所以这也是在实际应用中为什么会使用反范式设计。

第二范式(2NF)

如果关系模式R是1NF,并且每个非主属性都完全函数依赖于候选键,那么关系模式R就是第二范式。同样用最简单的话说,第二范式对于数据库设计的要求是所有的非主键数据都完全依赖于主键

第三范式(3NF)

如果关系模式R是1NF,并且每个非主属性都不传递依赖于R的候选键,那么关系模式R就是第三范式。同样用最简单的话来描述,第三范式对于数据库设计的要求是非主键数据不能依赖于外键

大部分的数据库结构设计都不能满足第三范式,通常第二范式是最常用的。

BC范式(BCNF)

如果关系模式R是1NF,并且每个属性都不传递依赖于R的候选键,那么关系模式R就是BC范式。简而言之,BC范式要求整个关系模式都不可再分且不能依赖于外键,即所有属性(包括主属性和非主属性)都不能传递依赖于R的任何候选码键。

BC范式是四种范式中最严格的存在,是一种最为理想化的数据库设计目标,但是在实际数据库设计中,能够达到BCNF的数据库是及其罕见的。

软考例题

模式分解
R=U={ABCD},F={AB,BC,BD,CA},现将R分解为U1={AB}U2={ACD}两个关系,求R1R2

这里可以根据依赖关系,直接推导出R1={AB},{AB,BA}R2={ACD},{AC,CA,AD}

无损连接与函数依赖保持判断
设关系模式RU,F,其中U={A,B,C,D,E}F{ABC,CD,BCE,EA},则分解ρ={R1(ABCE),R2(CD)}满足( ) 。
A. 具有无损连接性、保持函数依赖
B. 不具有无损连接性、保持函数依赖
C. 具有无损连接性、不保持函数依赖
D. 不具有无损连接性、不保持函数依赖

首先来确定无损连接性。计算R1R2得到{C},然后计算其闭包C+。经过计算,C+={CD},所以CR2的超键,故分解ρ是具备无损连接性的。

然后再确定函数依赖保持。ABCBCEEA都在R1上成立,CDR2上成立,所以分解是保持函数依赖的。

故这道题选A。

系列文章

  1. 函数依赖
  2. 模式分解

索引标签
架构知识
数据库设计
数据库范式
函数依赖
关系模式分解
模式分解