2014-01-17 40 views
0

ERD同一表列所需的两个外键条件

我附上了旧数据库的简单图。

在这种设计中

  • 有两个表ŤP由表TP表示之间的多对多的关系。
  • 的关系表TP有一个一对多与表d关系现在

,没有在规定的一些变化,即牛逼本身也有很多(d)秒。

如何在除旧(TPd)使这些新的外键条件表d

我的意思是,是否有可能链接T. [ID]D. [T]除了链接TP。[T,P]D. [T,P]

如何解决我的新要求?

回答

0

是的,您可以将表T中的外键引用放入表D中。它将是表T与表TP之间的一对多关系。

我不明白你为什么想要表D中的表T的FK引用。目前,您可以加入T到TP到D,以获得表D中与表T中的行相关的行。

+0

如果我只是将T添加到D关系。然后,向D插入新行可能会将TP切换为D状态。这是错的吗? – Lio

+0

@Lio - 是的,这是正确的,但是这也会破坏你的数据库表设计,以及如果你要添加T到D的关系。如果你在D中放置一个新的行,你会打破目前的TP到D的关系,并与我建议的额外的FK关系。 – GWines

+0

如果我只是让D [P]为空,你觉得怎么样?这有道理吗? 我在说,因为sql-sever似乎正在接受它。 我现在很困惑。 – Lio

0

看起来这很简单。只需添加一个新的列到D连接到T.请注意,如果我有这个权利,则来自D [T,P]的T可能不同于来自D的T. [T]

+0

这意味着我不能使用同一列D. [T]两个关系。对? – Lio

+0

因为它们可能(可能)是两个不同的T实际上在同一个D.认为TP只是另一个实体。想象你的图表就像2个关系:对T和X. X可以是任何东西,甚至TP。例如,假设TP代替了替代键K(自动增量,序列,无论)和T和P的唯一子句。如果D同时具有K和T的外键,那么它们将不会相同吗? – 2014-01-17 02:40:57

+0

谢谢@Leonardo。 是的,它似乎是相同的情况。 我不知道为什么sql-server允许这种组合,即使它不能被使用。 – Lio

0

我通过以下方式解决了这个问题:

  • 制作D. [T]可以为空。
  • 添加新的外键约束来表dT. [ID]D. [T])。

现在,

如果新行插入d表,以便P成分值设置为NULL ,则只是约束吨至d将被检查。

如果新行都有它的P组件设置为从NULL,延迟值,那么这两个约束吨至d目标价至d将被检查。

相关问题