数据库和第二范式

时间:2011-06-22 13:55:18

标签: database database-normalization

我有一张表满足以下关系:

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}怎么样?我应该如何规范这个?

2 个答案:

答案 0 :(得分:1)

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

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

在{AB} - &gt; {HI}的情况下,属性H和I依赖于键的一部分。 ({AB}是密钥{ABC}的一部分。)因此,您在{D} - &gt; {FG}和{E} - &gt; {MN}中从R. Ditto投影{HI}是正确的。< / p>

  • 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?

答案 1 :(得分:0)

根据您的FD:

我认为你选择的PK / CK并不好。

只有CK / PK = {ABCDEJ}因为关闭{ABCDEJ} = {ABCDEFGHILKLMN}所有属性,因此Prime属性(6)= {A,B,C,D,E,J}

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

因此,在删除这些部分依赖关系之后,您的表将被分解为这样(Removal of Partial Dependency in 2NF):

R1 = {ABHI}

R2 = {DFG}

R3 = {JKL}

R4 = {EMN}

R5 = {ABCDEJ}