Database 理解3NF:请用简单的英语
我正在处理一个示例问题,其中我们试图确定以下哪种关系是第三范式(3NF)。以下是我们得到的关系: R1(ABCD)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的步骤。有人能用通俗易懂的英语为每一种关系解释一下吗?如
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规则之一,那将非常有帮助:
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->A和A->B。B通过传递依赖于键李>
- B是关键属性吗?不,不是;CD是唯一的钥匙
- 是否存在可传递依赖项?是的,有:C->B和B->A
- 是一个关键属性吗?不,不是;C是唯一的钥匙
- 是否存在可传递依赖项?是的,有:AC->D和D->C
- C是一个关键属性吗?是的
让我简单地解释一下: 对于给定的关系, 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、D是prime属性,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