这是最近向我提出的一个问题,给定关系模式R = {A,B,C,D,E,G}和 R 上的一组 FD F = {DG -> AE, G -> C, BG -> AE, D -> CG},是否有任何 BCNF 分解是无损和保留依赖关系的?
我在关系 R 上尝试了不同的 BCNF 分解,但我找不到令人满意的分解。
因此,我尝试使用 Bernstein 的综合算法创建 3NF 模式。我计算出的最小覆盖为F'= {BG -> A, BG -> E, G -> C, D -> G, D -> E, D -> A}. 从这里开始,我只是把它分解成更小的模式:{BGA}, {BGE}, {GC}, {DG}, {DE}, {DA}.
但这不是在 BCNF 中吗?如果它在 BCNF 中,它看起来是无损的并且还保留了依赖关系。我已经使用函数依赖闭包 F+ 检查了依赖关系的保存。一切似乎都是合法的。即使在和我的同学讨论之后,我们都对为什么会这样感到困惑。
有人告诉我,我正在使用的 BCNF 分解:在 F 中找到一个在 R 中存在的违反 FD 并将其删除,将能够找到一个有效的分解,该分解既无损又保留依赖性(如果有的话)。我相信我清楚地遵循了这些步骤,所以我计算的 3NF 模式应该是正确的。至于BCNF分解,我按照书上的算法,找到违规的FD并使其成为子关系,并在剩余关系中只保留FD的行列式并重复。但我无法到达架构:{BGA}, {BGE}, {GC}, {DG}, {DE}, {DA}.
所以我的问题是为什么我能够使用合成算法找到令人满意的 BCNF 分解,其中分解只是最小覆盖,但我无法使用教科书分解算法来做到这一点?(假设我采取的所有步骤都是正确的)
编辑:这是BCNF 步骤的链接