2

我正在研究数据库概念,但有 3 个概念我不明白:规范覆盖、无关属性和闭包。我阅读了有关规范封面的定义,但我不了解它与 3NF 和 BCNF 的关系。规范覆盖的定义似乎是没有多余的属性,而多余的属性是不改变函数依赖集的闭包的属性,而闭包是 F 隐含的所有函数依赖的集合,一组函数依赖.

但这一切都有些模糊,我想知道一个直观的定义和如何计算

  • 规范封面
  • 关闭
  • 无关属性

功能依赖性我相信我理解 - 如果我们在表中拥有这些属性,这就像表中的 PK 一样。

在数据库细化中有一个相当广泛的答案- F(无关属性)的最小覆盖,但我发现很难阅读所有集合定义和代数,我宁愿用简单的英语定义。

例如,具有模式 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?规范覆盖与最小覆盖相同吗?

4

4 回答 4

11
于 2013-05-31T19:57:39.643 回答
1

闭包 A+,B+,C+,D+,E+,F+ 是这样计算的吗?

“G”怎么了?它在这里的缺席意义重大。你知道为什么吗?

如果我没记错的话,那么 BCDEFG 是 1NF/2NF 中的超级键(“整个键”),但它是最小的(3NF)吗?

Superkey(一个单词,没有空格)并不意味着整个 key;它只是意味着一把钥匙。所有属性的集合是一个平凡的超键,所以 {ABCDEFG} 是一个平凡的超键。

由于 B->C 和 C->A(传递依赖),您可以将平凡的超键简化为 {BCDEFG}。更多的减少是可能的,所以 {BCDEFG} 不是一个最小的超键。{ BCDEFG } 是一个可约化的超键。

最小的超级键之一是 {BG}。(我可以说,“{BG} 是不可约的超键。”)还有其他最小超键。

在闭包和规范覆盖的帮助下,还应该做些什么来将此示例规范化为 1NF、2NF 和 3NF?

以防万一您对此有一个常见的误解,通常不可能标准化为 2NF且不更高,或标准化为 3NF且不更高。消除部分键依赖(“规范化为 2NF”)可以将所有关系保留在 5NF 中。

下一步是确定所有候选键(所有不可约的超键)。

于 2012-10-25T11:36:02.423 回答
1

My answer is derived from the Algorithm given in Database System Concepts by Korth.

Are the closures A+,B+,C+,D+,E+,F+ calculated this way? Steps to calculate the closure of (A,B,C,D,E,F) under F let say take for B

  1. result = {B}
  2. repeat
  3. for each functional dependency(e.g B -> E) in F do
  4. begin
  5. if B is subset of result
  6. then result(i.e B) = result(i.e B) U {E}
  7. end
  8. until(result stops changing)

In this way the closures of the following will be: A+ = A

B+ = ABCDEF

C+ = AC

D+ = D

E+ = E

F+ = F

How to check an attribute is extraneous: An attribute A is extraneous in a dependency alpha(AB) -> beta(C) if

1) A belongs to beta(which is not in the current case) then create new FD F' = (F-{alpha -> beta}) U {alpha -> (beta - alpha)} and check if alpha+ under F'(**not F**) includes A, then A is extraneous in beta.

2) A belongs to alpha(which is correct), then create a new gamma{B} = alpha({AB}) - {A} and check if gamma+(i.e B+) under **F** i.e ABCDEF includes all attributes in beta({C}) and which is true. So A is extraneous in AB->C.

similarly check if C is extraneous in AB->C. So by above suggested algo

  1. F' : AB -> NULL; B →E; CF →D; C →A; B →F; CE →F; CD →B; B →C
  2. Compute AB+ under F' i.e ABCDEF which includes C . So Cis extraneous in AB-> C.

How to compute canonical cover?

Algo:

  1. F' = F
  2. If there is any FD like A->B and A->C then replace by A->BC(by union rule) Here the F' become : AB -> C; B-> CEF; C -> A; CD-> B; CE-> F; CF-> D
  3. Find the extraneous(left/right) in F' i.e A is extraneous in AB->C so remove A from AB->C , so that it becomes B->C and update F'.
  4. Now check if the F' is changed as previous. If changed goto step 2 and repeat until find the F' no longer changes.

(Explaining further iterations as below: itr2: F' : B -> C; B-> CEF; C -> A; CD-> B; CE-> F; CF-> D F' : B-> CEF; C -> A; CD-> B; CE-> F; CF-> D Now check C in B-> CEF, which is not extraneous Check E , which is also not extraneous. check F ,which is extraneous. So new F' : B-> CE; C -> A; CD-> B; CE-> F; CF-> D

itr3: F' : B-> CE; C -> A; CD-> B; CE-> F; CF-> D after this there is no further extraneous attribute found.

So the canonical cover of F are :

B-> CE

C -> A

CD-> B

CE-> F

CF-> D

Let me know if have some error in logic suggested above.

于 2015-11-29T09:47:50.147 回答
0

是的,规范封面与最小封面相同。并且所有的关闭都是正确的

以 3NF 为例..

  1. 只需找到规范的封面
  2. 建立每个单独的 fd 的关系。即.. 如果 Fc={AB->C,C->D} 然后制作 R1(ABC) & R2(CD)。
  3. 现在检查候选键是否包含在任何一个关系中。如果是,那么它在 3NF 中,如果不是,则再添加一个仅包含该候选键的关系。它完成了..!!
于 2012-06-03T13:12:23.177 回答