将关系修改为 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}
。您可以验证两者都是计算两组属性的闭包的键。
所以主要属性是b
、s
和n
。
你说这个关系不在 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。
我正在学习 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}
。您可以验证两者都是计算两组属性的闭包的键。
所以主要属性是b
、s
和n
。
你说这个关系不在 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。