我正在研究数据库概念,有3个概念我不明白。典型的封面,无关的功能依赖和封闭。我阅读了关于规范封面的定义,但我不了解它与3NF和BCNF的关系。规范覆盖的定义似乎是没有无关的属性,无关的属性意味着不改变函数依赖集的闭包的属性,而闭包是F所隐含的所有函数依赖的集合,一组函数依赖
但这一切都有点模糊,我既喜欢直观的定义,也喜欢如何计算
功能依赖我相信我理解它是什么,就像我们在表中拥有这些属性一样,它就像表中的PK一样。
database refinement - minimal cover of F (extraneous attributes)有一个相当广泛的答案,但我发现很难阅读所有的定义和代数,我宁愿用简单的英语定义。
例如,模式U = {A,B,C,D,E,F,G}和函数依赖
AB→C
B→E
CF→D
C→A
B→F
CE→F
CD→B
B→C
闭包A +,B +,C +,D +,E +,F +是这样计算的吗?
A + = A
B + = BCDEF
C + = A
D + = D
E + = E
F + = F
? 如果我没有弄错,那么BCDEFG是1NF / 2NF中的超级密钥(“全密钥”),但它是否最小(3NF)?
在闭包和规范封面的帮助下,还应该做些什么来将这个例子规范化为1NF,2NF和3NF?规范封面与最小封面相同吗?
我lösningen直到detta talsåharBCDEFG angetts som“prima attribut”och som“ickeprima”attribut men resonemanget saknas。
感谢您的帮助
答案 0 :(得分:1)
闭包A +,B +,C +,D +,E +,F +是这样计算的吗?
“G”发生了什么?它的缺席很重要。你知道为什么吗?
如果我没弄错,那么BCDEFG就是一把超级钥匙(“全键”) 1NF / 2NF,但它是最小的(3NF)?
超级密钥(一个字,没有空格)并不意味着整个密钥;它只是意味着一把钥匙。所有属性的集合都是一个简单的超级密钥,因此{ABCDEFG}是一个简单的超级密钥。
由于B-> C和C-> A(传递依赖),您可以将普通超级密钥减少到{BCDEFG}。可能还有几个减少,因此{BCDEFG}不是最小的超级密钥。 {BCDEFG}是一个可简化的超级密钥。
最小超级密钥的一个是{BG}。 (我可以说,“{BG}是一个不可简化的超级钥匙。”)还有其他最小的超级钥匙。
还应该做些什么来将此示例规范化为1NF,2NF和3NF 在封闭和规范封面的帮助下?
如果您对此有一个共同的误解,通常不可能标准化为2NF 且没有更高的,或标准化为3NF 且没有更高的。消除部分密钥依赖性(“规范化为2NF”)可以使您的所有关系保持在5NF。
下一步是确定所有候选键(所有不可约的超级键)。
答案 1 :(得分:1)
我的答案来自Korth的数据库系统概念中给出的算法。
闭包A +,B +,C +,D +,E +,F +是这样计算的吗? 计算F下(A,B,C,D,E,F)闭包的步骤,假设为B
B -> E
做F
)
B
是结果的子集result(i.e B) = result(i.e B) U {E}
通过这种方式,以下的闭包将是: A + = A
B + = ABCDEF
C + = AC
D + = D
E + = E
F + = F
如何检查属性是无关紧要的: 属性 A 在依赖关系alpha(AB)中是无关的 - > beta(C)if
1) A 属于beta(目前不属于此情况),然后创建新的FD
F' = (F-{alpha -> beta}) U {alpha -> (beta - alpha)}
并检查alpha+ under F'(**not F**) includes A
是否A
,然后beta
与gamma{B} = alpha({AB}) - {A}
无关。
2) A 属于alpha(这是正确的),然后创建一个新的gamma+(i.e B+)
并检查**F** i.e ABCDEF
下的beta({C})
是否包含AB->C
中的所有属性{1}}这是真的。因此 A 在C
中无关紧要。
同样检查AB->C
中F' : AB -> NULL; B →E; CF →D; C →A; B →F; CE →F; CD →B; B →C
是否无关紧要。所以通过以上建议算法
AB+
F'
下计算ABCDEF
,C
包括C
。因此AB-> C
中F' = F
无关紧要。如何计算规范封面?
ALGO:
A->B and A->C
A->BC
之类的FD,则替换为AB -> C; B-> CEF; C -> A; CD-> B; CE-> F; CF-> D
(按工会规则)
这里F'成为:A is extraneous in AB->C
A from AB->C
,然后移除B->C
,使其变为F'
并更新F' : B -> C; B-> CEF; C -> A; CD-> B; CE-> F; CF-> D
。(解释进一步的迭代如下:
itr2:
F' : B-> CEF; C -> A; CD-> B; CE-> F; CF-> D
C in B-> CEF
现在检查F' : B-> CE; C -> A; CD-> B; CE-> F; CF-> D
,这不是无关紧要的
检查E,这也不是无关紧要的。
检查F,这是无关紧要的。
新F' : B-> CE; C -> A; CD-> B; CE-> F; CF-> D
itr3:
B-> CE
在此之后,没有找到进一步的无关属性。
所以F的规范封面是:
C -> A
CD-> B
CE-> F
CF-> D
6q1, 6q2, 6q3, 6q4, 7q1, 7q2, 7q3, 7q4 8q1, 8q2, 8q3, 8q4;
如果上面提到的逻辑有误,请告诉我。
答案 2 :(得分:0)
是Canonical cover与最小封面相同。 并且所有的闭包都是正确的
在3NF中制作示例..