我正在学习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。
最后,如果要修改该表直到它位于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感到很困惑。我将不胜感激所有步骤上的任何帮助/想法!
模式具有两个候选键:{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。