规范化理论:模式分解

什么是模式分解?

关系模式R<U, F>的一个分解是指:\rho={_{}R_{1}<U_{1}F_{1}>, ... , R_{n}<U_{n}F_{n}>},其中U_{}=U_{1}\cupU_{2}\cup...U_{n},并且U_{i}\subseteqU_{j},1\leqi,j\leqn,F_{i}F_{}U_{i}上的投影。相应地将R储存在二维表r中的数据分散到二维表r_{1}r_{2},... ,r_{n}中去,其中r_{i}是属性r在属性集U_{i}上的投影。

把低一级的关系模式分解为若干个高一级的关系模式,分解方法并不是唯一的,在这些分解方法中,只有能够保证分解后的关系模式与原关系模式等价的方法才有意义。在这里,对于“等价”有以下3种不同的定义:

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

这三个定义是实行模式分解的三条准则。

 

下面通过一个例子讲解什么是模型分解。

对于一个有关学生的关系模式S-L(SNo, Sdept, Sloc),关系S-L如图所示:

关系S-L

 

其中SNo属性代表学生证号,Sdept属性代表所属院系,Sloc属性代表院系地址,S-L中有以下函数依赖:

              SNo→Sdept

              SNo→Sloc

              Sdept\overset{t}{\rightarrow}Sloc

 

已知S-L\in2NF,该关系模式存在着非主属性对码的传递函数依赖,存在插入异常、删除异常、数据冗余度大和修改复杂的问题,需要分解该关系模式,使之成为更高范式的关系模式。

 

第一种分解情况

将S-L分解为下面三个关系模式:

              SN(Sno)

              SD(Sdept)

              SO(Sloc)

 

分解后的关系为:

 

SN、SD和SO都是规范化程度很高的关系模式,但对比分解之前的关系S-L,发现分解后的关系模式会丢失许多信息,如图:

 

分解后的关系,无法查询95001学生所在的系或所属院系的地址了,这种分解方法是不可取的,丢失了数据之间联系的信息。

 

第二种分解情况

将S-L分解为以下两个关系模式:

              NL(Sno, Sloc)

              DL(Sdept, Sloc)

 

分解后的关系为:

 

对NL和DL关系进行自然连接的结果为:

 

对比分解之前的关系:

      

 

发现NL\JoinDL比原来的S-L关系多了三个元组,因此我们也无法知道原来的S-L关系种究竟有哪些元组了,从这个意义上说,此分解仍然丢失了信息。

 

第三种分解情况

将S-L分解为以下两个关系:

              ND(Sno, Sdept)

              NL(Sno, Sloc)

 

分解后的关系模式为:

 

对ND和NL关系进行自然连接的结果为:

 

第三种分解情况没有丢失信息,称这种分解具有”无损连结性”,但是它仍然存在一定的问题,例如95001学生由CS系转到IS系,ND关系的(95001, CS)元组和NL关系的(95001, A)元组必须同时进行修改,否则会破坏数据库的一致性,如图:

 

产生该问题的原因是,S-L中的函数依赖Sdept→Sloc既没有投影到关系模式ND上,也没有投影到关系模式NL上。这种分解没有保持原关系模式中的函数依赖。

 

第四种分解情况

将S-L分解为以下两个关系:

              ND(Sno, Sdept),Sno→Sdept

              NL(Sdept, Sloc),Sdept→Sloc

这种分解保持了函数依赖,称为具有“保持函数依赖性”。

 

再看第四种分解的情况:

 

对ND和DL关系进行自然连接,结果为:

 

这种分解不仅具有“保持函数依赖性”,还具有“无损连接性”。

 

在给出的例子中:

第一种情况,既不具有无损连结性,也未保持函数依赖;

第二种情况,既不具有无损连结性,也未保持函数依赖;

第三种情况,具有无损连结性,但未保持函数依赖;

第四种情况,既具有无损连结性,又保持了函数依赖。

 

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

具有无损连接的模式分解\rho={_{}R_{1}<U_{1}F_{1}>, ... , R_{n}<U_{n}F_{n}>}是R<U, F>的一个分解,若对R<U, F>的任何一个关系r均有r=r在\rho中各关系模式上投影的自然连接成立,则称分解\rho具有无损连接性。简称\rho的无损分解。

只有具有无损连接性的分解才能保证不丢失信息,但是无损连结性不一定解决插入异常、删除异常、修改复杂、数据冗余等问题。

 

保持函数依赖的模式分解\rho={_{}R_{1}<U_{1}F_{1}>, ... , R_{n}<U_{n}F_{n}>}是R<U, F>的一个分解,若F所逻辑蕴含的函数依赖一定也为分解后所有的关系模式中的函数依赖F_{i}所蕴含,即F^{+}= \left (F _{1} \cup F _{2} \cup ... \cup F _{n} \right )^{+},则称关系模式R的这个分解是保持函数依赖的。

 

如果一个分解具有无损连接性,则它能够保证不丢失信息。如果一个分解保持了函数依赖,则它可以减轻或解决各种异常情况。

【分解具有无损连接性】和【分解保持函数依赖】是两个相互独立的标准。具有无损连结性的分解不一定能够保持函数依赖,保持函数依赖的分解也不一定具有无损连接性。

 

模式分解的相关算法

无损连接的测试算法:https://blog.csdn.net/Shishishi888/article/details/90271943

其他算法待更新

 

 

 

参考自:《数据库系统概论》,王珊,萨师煊编著

 

 

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值