将关系修改为 BCNF

Modifying Relation into BCNF

我正在学习 DBMS 和规范化,并且遇到了以下练习。对于以下问题:

Consider the relation R(b,e,s,t,r,o,n,g) with functional dependencies

         b,s -> e,r,o,n
         b -> t
         b -> g
         n -> b  
         o -> r

     (a) identify candidate keys

     (b) identify prime attributes

     (c) state the highest normal form of this table

我认为 (a) 将是 {b, s},因为它们可以毫无冗余地识别所有属性。

(b) 也将是 {b, s} 因为它们组成了 (a) 的候选键。

(c) 出于多种原因将是 1-NF。它不满足 2-NF,因为存在部分依赖性 n -> b。上述函数依赖只依赖于 b 而不是 s,因此是部分依赖。它不满足 3-NF,因为 o -> r 表示一个非素数属性依赖于另一个非素数属性。 BCNF 不满足,因为 3-NF 不满足。

最后,如果我要修改 table 直到它在 BCNF 中,会将关系 R 拆分为:

R1(b, e, s, r, o, n) with b, s -> e, r, o, n 

R2(b, t, g) with b -> t and b -> g

同时消去n -> b和o -> r满足BCNF?

我最困惑的是关于满足 BCNF 的最后一部分。我将非常感谢所有步骤中的任何 help/thoughts!

架构有两个候选键:{b, s}{n, s}。您可以验证两者都是计算两组属性的闭包的键。

所以主要属性是bsn

你说这个关系不在 2NF 中,也不在 3NF 中是正确的。

您提议的分解不会在 BCNF 中生成子模式,因为在 R1 中依赖性 o → r 仍然存在,并且 o 不是 R1 的超级键。

BCNF 的“经典”分解算法生成以下规范化模式:

R1(b g t)
R2(o r)
R3(b n)
R4(e n o s)

但是依赖项

b s → e
b s → n
b s → o
b s → r

在分解中不保留。

保留数据和依赖关系的 3NF 分解如下:

R1(b e n o s) 
R2(b g t)    
R3(o r)

在这个分解中,R2和R3也在BCNF中,而R1中的依赖n → b违反了BCNF。