2014-01-17 92 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將被檢查。

相關問題