基于原始功能依赖或规范覆盖的依赖性保留?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于原始功能依赖或规范覆盖的依赖性保留?相关的知识,希望对你有一定的参考价值。

鉴于这些功能依赖性

R: {A,B,C,D,E,F}

AC->EF
E->CD
C->ADEF
BDF->ACD

我把它作为规范的封面:

E->C
C->ADEF
BF->C

然后将其分解为Boyce Codd Normal Form:

Relation 1: {C,A,D,E,F} 
Relation 2: {B,F,C}

我认为这是无损和依赖保留?但是这是真的,因为从原始的功能依赖性BDF-> ACD不再是我的任何关系。但是,如果我从计算出的规范封面出发,那么我的所有功能依赖都会被保留下来。

所以问题是:这个分解是否保留了BCNF依赖?

答案

当且仅当依赖关系在分解关系上的投影的并集是关系的依赖关系的覆盖时,分解才保留依赖关系。

因此,要知道分解是否保留依赖关系,检查特定封面的依赖关系是否已被保留是不够的(例如,通过查看某些分解关系是否具有依赖关系的所有属性)。例如,在R(ABC)与封面F = {A→B, B→C, C→A}的关系中,人们可以认为在分解R1(AB)R2(BC)时,依赖性C→A不会被保留。但是如果你在F投影AB你获得A→B, B→A,投射它在BC你获得B→C, C→B,所以从他们的联盟你也可以得到C→A

即使存在执行该任务的多项式算法,该检查也不简单(例如,在J.Ullman,Principles of Database Systems,Computer Science Press,1983中描述了一种)。

假设您提供的依赖关系形成了关系依赖关系的封面,那么您找到的规范封面是不正确的。实际上BF -> C不能从原始依赖项派生。

由于这个原因,你的分解是不正确的,因为R2(BCF)不在BCNF中(实际上,它不在2NF中)。

R的一个可能的规范封面如下:

BDF → C
C → A
C → E
C → F
E → C
E → D 

在分析算法之后,BCNF中存在两种可能的分解(根据选择用于消除的依赖性)。一个是:

R1 = (ACDEF)
R2 = (BC)

而另一个是:

R1 = (ACDEF)
R3 = (BE)

(请注意,BCBE是原始关系的候选键,与BDF一起)。

R1中依赖关系的封面是:

C → A
C → E
C → F 
E → C
E → D

虽然在R2R3都没有非平凡的依赖关系。

由此,我们可以得出结论,两个分解都不会保留依赖关系;例如,无法获得以下依赖项(以及从中派生的所有依赖项):

BDF → C

以上是关于基于原始功能依赖或规范覆盖的依赖性保留?的主要内容,如果未能解决你的问题,请参考以下文章

重写覆盖依赖文件

02.模块化相关规范

mysql开发规范

实战篇最详细的Rollup打包项目教程

优秀代码规范

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