【问题标题】:3NF Normal form3NF范式
【发布时间】:2011-11-24 07:37:09
【问题描述】:

我有一个关于 3NF 范式的问题:

Normalize, with respect to 3NF, the relational scheme E(A, B, C, D, E, F) 
by assuming that (A, B, C) is the unique candidate key and that the following additional functional dependencies hold: 
    A,B -> D 
    C,D -> E 
    E -> F 

我的理解是,如果我应用 3NF,如果所有属性都表示架构是 3NF

非素数不传递依赖于任何关键候选,结果应该是:

E'=(A,B,C,E,F), E''= (B,D) , E'''= A,B,C,D,F) , E''''= (D,E) , E''''''= (A,B,C,D,E),

E''''''= (E,F)

但我确实认为我错了......

有人可以帮助理解这个问题吗?

谢谢

【问题讨论】:

  • 这是作业吗?那是一个标签。
  • " . . . . . . . . . 3NF 表示如果所有非素数属性不传递地依赖于任何关键候选,则模式是 3NF”No. 3NF 意味着 a) 关系在 2NF 中,并且 b ) 每个非主属性都直接依赖(即不传递依赖)每个候选键。

标签: normalization


【解决方案1】:

(为了可读性而重新格式化)

我的理解是,如果我应用 3NF 表示架构 是 3NF,如果所有非素数属性不传递依赖于任何 关键候选人,结果应该是:

  • E1= {A,B,C,E,F}
  • E2= {B,D}
  • E3= {A,B,C,D,F}
  • E4= {D,E}
  • E5= {A,B,C,D,E}
  • E6= {E,F}

3NF 意味着 a) 关系在 2NF 中,并且 b) 每个非主属性都直接依赖于(即,不传递依赖)每个候选键。

反过来,2NF 意味着 a) 关系在 1NF 中,并且 b) 每个非主属性都依赖于每个候选键的整体,而不仅仅是任何候选键的一部分。

给定 {ABC} 是候选键,并且给定 {AB->D},您可以看到 D 依赖于候选键的一部分。所以

  • E0 = {A,B,C,D,E,F}

不在 2NF 中。您可以通过将该依赖属性移动到新关系来解决此问题,然后将确定它的属性复制到同一关系中。

  • R0 = {ABC DEF} 这个关系——我们开始时,不在 2NF 中——消失了,被替换为

  • R1 = {ABC EF}

  • R2 = {AB D}

你想从这里继续吗?

【讨论】:

  • 感谢 Catcall ..我想如果我继续的话,我必须写:R3(ABCDF)、R4(CDE)、R5(ABCDE)、R6(EF)..我说得对吗? .这意味着我开始的关系现在已经规范化了..关键是检查R是否在2NF中然后开始规范化..正确吗?
  • @user962800:你是如何得出“R3(ABCDF)”的?
【解决方案2】:

要正确进行规范化,理解正式定义是无可替代的。如果您仍在努力建立这种理解,那么人们可以使用一个可爱的小助记符来帮助记住 3NF 的本质并判断他们正在查看的表格是否为 3NF。

“钥匙,整个钥匙,只有钥匙,所以请帮帮我Codd。”

你如何应用它?关系的每个属性都必须依赖于键。它必须依赖于 whole 键。我不能依赖任何不是关键的东西。当您查看示例时,显然存在问题,您需要进行规范化。您需要达到一个点,即每个违反 3NF 的非键列都超出了您的原始关系。每个非关键列 D、E 和 F 都违反 3NF。

请注意,您的附加功能依赖项涵盖了原始关系中的所有非键列。这些额外的功能依赖中的每一个都会产生一个关系:

{ A B D } - 这解决了属性 D 的 3NF
{ C D E } - 这解决了属性 E 的 3NF
{ E F } - 这解决了属性 F 的 3NF

你原来的关系还剩下什么?除了候选键之外什么都没有:

{ A B C }

【讨论】:

  • 非常感谢您的回复..我想我掌握了要点..您认为我可以找到有关规范化的练习吗?..谢谢
  • 没问题!如果您喜欢,请随时为答案投票。我敢肯定有很多规范化练习。尝试在 Google 中查找数据库+规范化+练习。
  • “钥匙,整个钥匙……”助记词根本不准确。规范化同样关注所有候选键,而不仅仅是每个表的任何一个键。所以说“钥匙”是不够的,好像只有一个钥匙需要考虑。这就是为什么我宁愿在没有进一步说明的情况下看到那个特定的助记符重复。
  • 您会注意到,我的回答是以“在正确进行规范化方面,没有什么可以替代理解正式定义......”。以我的经验,许多程序员很难通过数学理论,因此他们很难识别任何给定的表何时是 3NF 或不是。助记符是一种简化——显然。既然它说的是“关键”,那么对于 English.StackExchange.com 来说,助记符在候选键与主键的问题上是否松懈、不正确或保持沉默将是一个问题。
猜你喜欢
  • 2021-11-21
  • 2011-04-25
  • 2016-01-01
  • 1970-01-01
  • 2012-03-31
  • 2010-12-15
  • 1970-01-01
  • 2014-09-23
  • 2014-09-22
相关资源
最近更新 更多