2014-01-16 46 views
0

我在MySQL數據庫中有許多表。它們的定義如下所示:我是否需要跨多個表繼承外鍵?

機構

  • AgencyID
  • AgencyName

[機構

  • ORGID
  • ORGNAME
  • 阿根cies_AgencyID(原子能機構表一個一對多的關係)

位置

  • LocationID
  • LOCATIONNAME
  • Orgs_OrgID(一到多用[機構表關係)
  • Orgs_Agencies_AgencyID(繼承關係)

問題:是否需要在地點表中包含Orgs_Agencies_AgencyID列?與代理商表格的關係已經在Orgs表格中建立。

如果我創建鏈接到位置表的另一個表,怎麼辦?我需要繼承LocationID - 是否需要繼承OrgID和AgencyID?或者可以從早期的表中交叉引用它們嗎?

感謝,如果你能幫助..

回答

1

我需要包括在 位置表中的列Orgs_Agencies_AgencyID?

除非作爲優化,否則不需要包含Locations.Orgs_Agencies_AgencyID

如果您打算使用全部三個表格運行查詢,則只需在位置中使用Orgs.Agencies_AgencyID而不是Locations.Orgs_Agencies_AgencyID

此外,還有與位置表的問題:

1)您可能需要正常化Locations表,如下:

位置

  • LocationID
  • LOCATIONNAME

Organization_Locations

  • LocationID
  • Orgs_OrgID(與[機構表中的一個一對多關係)

2)作爲表現爲:

  • 1個位置被分配給1個組織。
  • 如果將相同的位置分配給兩個組織(例如聯合辦公室),則您有重複的行。
+0

好的 - 在地點表中包含Orgs_Agencies_AgencyID實際上是一個壞主意嗎?如果輸入的錯誤值與Orgs表中的值不匹配,那麼可能很難確定錯誤發生在哪裏。? –

+0

機構是組織的一個子集嗎?這是否意味着不管機構是否屬於同一個組織,機構可以擁有不同的地點?如果是這樣,'Orgs_OrgID'是可以刪除的條目。擺脫其中一列不應該導致錯誤,因爲這些信息可以從關係中獲得。例如。 'Orgs_Agencies_AgencyID - > Agencies_AgencyID':您可以從代理商ID中獲取組織代碼。 –

+0

如果應將組織分配到位置,則不會因刪除代理機構而出現錯誤。但是,您可以通過將不匹配的代理機構和組織分配到位置來導致錯誤。 –