关于关系规范化的问题

时间:2011-02-04 06:30:13

标签: database computer-science normalization

例如,让我们考虑以下关系:

  

R( A,B,C ,D,E,F)

其中粗体表示它是主键属性

  

F = {AB-> DE,D-> E}

现在,这看起来是第一种正常形式。它不能在第三范式,因为我有一个传递依赖,它不能是第二种形式,因为并非所有非关键属性都依赖于整个主键。

所以我的问题是:

  1. 我不知道如何制作F和C.我没有任何关于它们的功能依赖信息! F不依赖于什么?如果是这种情况,我想不出任何解决办法让R进入第二范式而不把它拿出来!

  2. C怎么样? C还存在不在功能依赖性列表中被引用的问题。该怎么办?

  3. 我尝试让R进入第二范式会是这样的:

    R(的 A,B 下,d)

    R'( D ,E)

    但如前所述,我不知道如何处理C和F.它们是多余的,所以我只是将它们拿出来,上面的尝试就是我要做的就是把它变成第二种形式(和第3个!)?

    由于

3 个答案:

答案 0 :(得分:3)

鉴于R的定义{A,B,C}是主键,那么本质上存在功能依赖:

  • ABC→ABCDEF

这就是说A,B和C的值固有地决定或控制D,E和F的值以及它们决定自己价值的微不足道的事实。

你有一些额外的依赖关系,由集合F标识(它与属性F不同 - 表示法不是非常合适,并且可能导致混淆 * ):

  • AB→DE
  • D→E

正确诊断时,系统处于1NF(因为1NF实际上意味着“它是一张桌子”)。由于传递依赖性,它不在2NF或3NF或BCNF等中,因为某些属性仅依赖于密钥的一部分。

你是对的,你将最终得到以下两个关系作为分解的一部分:

  • R 1 D ,E)
  • R 2 A B ,D)

您还需要第三种关系:

  • R 3 A B C ,F)

通过这些,您可以使用连接重新创建原始关系R.关系集合{R 1 ,R 2 ,R 3 }是原始关系R的非损失分解。


* 如果识别辅助功能依赖关系集的F意图与属性F相同,那么该属性的定义就会有一些非常奇怪的东西。我需要查看关系R的样本数据,以便有机会知道如何解释它。

答案 1 :(得分:0)

  

F不依赖于什么?

不,您还没有在表单中获得有关它的任何显式信息

{something -> F}

对于C来说基本上也是如此。你应该通过应用阿姆斯特朗的公理来推断其他依赖关系。 (可能)

想想如何完成这个:

给定R( A,B,C ,D,E,F)

  • { ABC - > ?}

[后来。 。 。我看到Jonathan Leffler已经打破了这个悬念,所以我将完成这个。]

{ ABC - > DEF}(根据定义)因此,

{ ABC - > F}(通过分解。这里是F和C进来的地方。这是你的第三个关系。)。

答案 2 :(得分:0)

我认为R的主键设置错误。如果F在功能上与任何无关,那么它必须是密钥的一部分

所以你有R( ABCF DE)现在处于第一范式(F = {AB-> DE,D-> E})现在你可以把它改成第二种正常形式。 DE并不依赖于整个键(部分依赖),因此您将其置于另一种关系中以获得第二种正常形式:

R( ABCF )F = {}

R1( #AB DE)F = {AB-> DE}

现在这个关系没有任何传递依赖,因此它已经处于第三范式。