【问题标题】:Multiple dependencies when trying to achieve the third normal form尝试实现第三范式时的多重依赖关系
【发布时间】:2015-04-04 00:40:11
【问题描述】:

假设我得到了以下数据库:

a          //primary key
b
c
d

在这样的以下函数依赖是有效的:

a -> bcd
b -> cd
c -> bd

我应该怎么做才能将它传递给第三范式?

我尝试如下分离:

a -> b          //this b is the foreing key to the b of the other tables
b -> c
b -> d

对吗?

【问题讨论】:

  • 您不分离依赖关系,而是分离表。您应该将原始表 R(a,b,c,d) 拆分为两个表(假设 R1 和 R2)。你这样做了吗?只是为了澄清您可能已经知道的内容:a、b、c 和 d 是一个表中的列。
  • FD c->bd 发生了什么?
  • @SimoKivistö 新关系实际上是新表。抱歉没有说清楚。
  • 好的,然后将表格作为R1,R2等,并给出所有这些。 (a, b, c, d) 已经意味着特定的东西。

标签: foreign-keys relational-database database-normalization functional-dependencies


【解决方案1】:

你想错了。您不会玩弄依赖关系(除非这是一些专门告诉您的玩具硬件问题);您想拆分表格,以便所有表格都在 3NF 中。在你的情况下,这将是(我认为!!):

ab

bc

cd

斜体字母代表一个键。现在,举一个你为什么不玩依赖的例子:

假设这个数据库是人的,并保存了他们的 SS、BDate 和 Name。然后你可以说 SS -> BDate, Name,因为你的 SS 号码对你来说是独一无二的。现在,当您玩弄依赖关系时,您会玩弄数据的含义。不是你说SS号可以决定你的名字;就是这样。说 SS -> BDate 并消除 Name 属性是错误的。

同样,对于您的数据库,虽然 ABCD 没有任何意义,但它们的依赖关系是固定的,不可更改。所以,这是我的超长说法:拆分表,不要触及依赖项! =)

【讨论】:

  • 不是很长。 +1 强调意义。这些天,想要成为理论家的人将事物抽象到失去意义的地步,然后他们想知道为什么他们会感到困惑。
猜你喜欢
  • 1970-01-01
  • 2015-11-29
  • 1970-01-01
  • 2011-07-14
  • 2011-01-30
  • 1970-01-01
  • 2019-12-17
  • 2020-01-20
  • 1970-01-01
相关资源
最近更新 更多