Database 理解3NF:请用简单的英语

Database 理解3NF:请用简单的英语,database,database-normalization,3nf,Database,Database Normalization,3nf,我正在处理一个示例问题,其中我们试图确定以下哪种关系是第三范式(3NF)。以下是我们得到的关系: R1(ABCD) ACD->B  AC->D  D->C  AC->B R2(ABCD) AB->C  ABD->C  ABC->D  AC->D R3(ABCD) C->B  A->B  CD->A  BCD->A R4(ABCD) C->B  B->A  AC->D  AC->B 我知道答案是R1在3NF中,但我很难理解确定什么违反了3NF的步骤。有人能用通俗易懂的英语为每一种关系解释一下吗?如

我正在处理一个示例问题,其中我们试图确定以下哪种关系是第三范式(3NF)。以下是我们得到的关系:

R1(ABCD)
ACD->B  AC->D  D->C  AC->B

R2(ABCD)
AB->C  ABD->C  ABC->D  AC->D

R3(ABCD)
C->B  A->B  CD->A  BCD->A

R4(ABCD)
C->B  B->A  AC->D  AC->B

我知道答案是R1在3NF中,但我很难理解确定什么违反了3NF的步骤。有人能用通俗易懂的英语为每一种关系解释一下吗?如果您能分步向我展示每个关系如何违反3NF规则之一,那将非常有帮助:

  • X->A,那么A是X的子集
  • X是一个超级键
  • A是R的某个键的一部分
  • 对于R1,我采取的第一步是将其分解为闭包:

    ACD+=ABCD
    AC+=ABCD
    D+=C

    ACD和AC是超级键,它们满足规则2。
    1.D->C,但C不是D的子集。违反规则1。
    2.D不是超级键。违反规则2。
    3.C是R的某个键的一部分。C是AC和ACD的一部分。那么,第3条规则得到了支持


    我甚至不确定我是否正确地执行了这些步骤,因此请尽可能简单地将其分解,以供那些正在与这些概念作斗争的人使用。谢谢。

    用简单的英语,这里有3种标准格式:

    1NF:存在“键”确保表位于1NF中(键必须在那里)

    2NF:要求“每个”非键属性依赖于“整个键”,以确保2NF

    3NF:进一步要求“每个”非键属性都依赖于“除了键之外什么都不依赖”确保了3NF

    现在,为了这个:

    R1(ABCD)ACD->B  AC->D  D->C  AC->B

    看看这些ACD->B和AC->B:显然违反了2NF条件。忘记3NF,这个关系不是2NF中的偶数。“整把钥匙”-->概念不成立


    我想,你已经用集合证明了这一点。

    3NF的一个简化表达式是“如果传递依赖于键的每个属性都是键属性,那么关系就在3NF中。”1键属性是任何候选键的一部分

    R3是关于3NF分析的较简单的方法之一

    R3(ABCD)

    • C->B
    • A->B
    • CD->A
    • BCD->A
    唯一的候选密钥是CD

    • 是否存在可传递依赖项?是的,有:CD->A和A->B。B通过传递依赖于键
    • B是关键属性吗?不,不是;CD是唯一的钥匙
    所以R3不在3NF中

    R4是相似的。C是唯一的候选键

    • 是否存在可传递依赖项?是的,有:C->B和B->A
    • 是一个关键属性吗?不,不是;C是唯一的钥匙
    所以R4不在3NF中

    在R1中,候选密钥是AC和AD

    • 是否存在可传递依赖项?是的,有:AC->D和D->C
    • C是一个关键属性吗?是的
    所以R1在3NF中


  • “关系模式设计的新范式”,Carlo Zaniolo,《数据库系统上的ACM事务》,第7卷,第3期,1982年9月,第492页。最近的工作使用prime属性来指代作为任何候选密钥的一部分的属性,而非prime属性则指代不属于任何候选密钥的属性

  • 让我简单地解释一下:

    对于给定的关系, R1(ABCD),功能相关性为:

    ACD->B

    AC->D

    D->C

    AC->B

    处于3NF的状态

    X->Y这里X是一个超级键,当Y是非素数属性时,否则它可以是任何属性

    主属性是属于超级键的属性

    非素数属性是不属于超级键的属性

    让我们回到关系R1

    AC+=ABCD

    AD+=ABCD

    ACD+=ABCD和

    D+=DC

    因此,我们将AD、AC、ACD作为我们的超级键

    A、C、Dprime属性,B是A非prime属性

    ACD->B

    这个函数依赖关系在3NF中,因为ACD是一个超级键,B是基本属性

    AC->D

    这个函数依赖关系也在3NF中,因为AC是一个超级键,D是主属性

    D->C

    这个函数依赖关系也在3NF中,因为D是基本属性,C也是基本属性

    AC->B

    此函数依赖关系也在3NF中,因为AC是超级键,B是非素数属性


    希望,这有帮助

    对于第三范式(3NF)中的关系,我发现最好的定义如下:

    A relation schema R is in 3NF if, whenever a function dependency X -> A holds in R, either
        (a) X is a superkey of R, or
        (b) A is a prime attribute of R.
    
    现在有三个定义需要澄清,
    key
    superkey
    ,和
    prime-attribute

    对于定义,我们将使用R1关系中的示例来描述它们:

    R1(ABCD)
    ACD -> B   AC -> D   D -> C   AC -> B
    
    key:
    键是确定关系的每个属性的属性。换句话说,属性集将为您提供关系中不在该集中的所有其他属性。在上述示例的R1中,键是
    AC
    AD
    。为什么
    AC
    是一把钥匙?因为通过了解属性
    A
    C
    可以确定剩余的属性
    B
    D
    。为什么
    AD
    是一把钥匙?同样的原因<代码>A和
    D
    将最终决定
    B
    C

    superkey:
    superkey基本上是一个s
    R1(ABCD)
    ACD -> B   AC -> D   D -> C   AC -> B
    
    R1(ABCD)
    ACD -> B   AC -> D   D -> C   AC -> B
    
    R2(ABCD)
    AB -> C   ABD -> C   ABC -> D   AC -> D
    
    R3(ABCD)
    C -> B   A -> B   CD -> A   BCD -> A
    
    R4(ABCD)
    C -> B   B -> A   AC -> D   AC -> B
    
    R1:
    keys: AC, AD
    prime attributes: A, C, D
    
    R2:
    keys: AB
    prime attributes: A, B
    
    R3:
    keys: CD, 
    prime attributes: C, D
    
    R4:
    keys: C
    prime attributes: C