1

我有一个满足以下关系的表:

R(A, B, C, D, E, F, G, H, I, J, K, L, M, N)
{A, B, C} is the primary key. 
{D, E} forms a candidate key. 

The following functional dependencies exist among the attributes of the relation:
{A, B} -> {H,I}
{D} -> {F,G}
{J} -> {K,L}
{E} -> {M,N}

我需要把它分解为第二范式,所以我{AB->HI}, {D->FG}, {E->MN}分成独立的表。但是怎么样{J->KL}?我应该如何规范这个?

4

2 回答 2

1

当且仅当所有非主属性在功能上依赖于每个候选键的所有属性,而不只是依赖于任何候选键的属性子集时,一个表才属于 2nf。

根据您的评论,您有两个键,{ABC} 和 {DE}。

在 {AB}->{HI} 的情况下,属性 H 和 I 依赖于键的一部分。({AB} 是键 {ABC} 的一部分。)因此,对于 {D}->{FG} 和 {E}->{MN},从 R. Ditto 投影 {HI} 是正确的。

  • R 1 = {ABCDEJKL}
  • R 2 = {ABHI}
  • R 3 = {DFG}
  • R 4 = {EMN}

当涉及到属性 J、K 和 L 时,您必须问同样的问题。

  • J 在功能上是否依赖于属性 A、B、C、D 和 E 的任意组合,不包括给定的键 {ABC} 和 {DE}?
  • K 在功能上是否依赖于属性 A、B、C、D 和 E 的任意组合,不包括给定的键 {ABC} 和 {DE}?
  • L 在功能上是否依赖于属性 A、B、C、D 和 E 的任意组合,不包括给定的键 {ABC} 和 {DE}?

您如何看待 J、K 和 L?

于 2011-06-22T18:04:41.350 回答
0

根据你的FD:

我觉得你这里PK/CK的选择不好。

只有 CK / PK 将是 ={ABCDEJ} 因为 {ABCDEJ} ={ABCDEFGHILKLMN}All Attributes 的闭包,因此 Prime attributes (6)={A,B,C,D,E,J}

在 2NF 中,我们不允许部分依赖。这里部分函数依赖:{A, B} -> {H,I} {D} -> {F,G} {J} -> {K,L} {E} -> {M,N}

因此,在删除这些部分依赖项后,您的表将像这样分解(在 2NF 中删除部分依赖项):

R1 = {ABHI}

R2 = {DFG}

R3 = {JKL}

R4 = {EMN}

R5 = {ABCDEJ}

于 2016-04-14T12:49:07.893 回答