BCNF中的依存关系保留分解

问题描述

在给定一个关系模式R = {A,B,C,D,E,G}且在R上有一组FD F = {DG -> AE,G -> C,BG -> AE,D -> CG}的情况下,最近出现了一个问题,是否存在无损且保持依赖关系的BCNF分解?

我对关系R尝试了不同的BCNF分解,但是找不到令人满意的分解。

因此,我尝试使用Bernstein的Synthesis算法创建3NF模式。我计算出的最小覆盖率是F'= {BG -> A,BG -> E,D -> G,D -> E,D -> A}。从这里开始,我将其分解为较小的模式:{BGA},{BGE},{GC},{DG},{DE},{DA}

但是BCNF中不是吗?如果在BCNF中,则它看起来是无损的,并且还可以保留依赖项。我已经通过使用功能性依赖项关闭F +检查了依赖项的保留。一切似乎都是合法的。即使在与同学讨论之后,我们也都对为什么会如此感到困惑。

我被告知,我正在使用的BCNF分解:在F中找到一个保留在R中的违规FD并将其删除,将能够找到有效的分解,该分解既无损又保持依赖关系(如果存在)。我相信我清楚地遵循了这些步骤,因此我计算出的3NF模式应该是正确的。至于BCNF分解,我遵循了算法,在书中找到了违规的FD并将其作为子关系,仅将FD的行列式保留在剩余关系中并重复。但是我无法到达模式:{BGA},{DA}

所以我的问题是,为什么我能使用综合算法找到令人满意的BCNF分解,而分解只是最小覆盖,而我却无法使用教科书分解算法来做到这一点? (假设我采取的所有步骤都是正确的)

编辑:这是BCNF步骤的link

解决方法

一些事实,假定给定的FD构成了关系的所有FD的典型覆盖。

原始关系的唯一候选键是{BD}。因此,您提出的3NF分解并不是无损的,因为没有关系架构同时包含这两个属性。

严格按照伯恩斯坦综合算法进行以下分解:

R1 (A B E G) with cover of projected dependencies {BG → E,BG → A} and candidate key BG
R2 (A D E G) with cover of projected dependencies {D → G,D → E,D → A} and candidate key D
R3 (C G) with cover of project dependencies {G → C} and candidate key G
R4 (B D) with no non-trivial dependencies

此分解既保留数据又保留依赖项。而且,所有的架构也都满足BCNF。

所以,现在的问题是:为什么在这种情况下,用于查找BCNF的分析算法仅产生具有依赖关系损失的分解?好吧,答案很简单,即使通过消除以任何顺序违反BCNF的FD来应用这样的算法,也不能保证找到所有可能的分解(并且不保证解决方案找到保留的依赖项)。简单地说,它是一种在BCNF中分解的众所周知(且简单)的算法,因此,在许多数据库书籍中都可以找到它。由于上述(和其他)原因,实际上在很多情况下3NF被认为是BCNF的合理替代品。