Oracle

為一對多關係使用關聯表是常見的做法嗎?

  • April 26, 2019

我目前在工作中與一些數據庫架構師存在概念上的分歧。我在這個領域的教育完全來自 UofGoogle,所以我確信他們是對的,但在網上找不到支持他們的證據。

我們正在討論的數據庫部分與不同領域的製造設備有關。有一個包含所有唯一 AREA_CD 的表。每個區域可以包含多件設備(EQUIP_CD),但單件設備不能在多個區域中。即這是一個單(AREA_CD)對多(EQUIP_CD)的關係。

我對db設計的理解是我們應該有一個與區域表直接相關的設備表,其中:AREA_CD = PK&FK到區域表EQUIP_CD = PK(組合PK是因為有一些設備共享相同的代號,但不一樣。這是我們正在嘗試升級的遺留系統的不幸現實)。

建築師說最好的做法是通過關聯表連接區域表和設備表,我認為這是專門針對多對多關係的。

如果 EQUIP_CD 指的是特定類型的設備(具有我們有興趣儲存的屬性),這對我來說是有意義的,其中多個設備可能存在於不同的區域。然而,這將是一個多對多的關係,這裡不是這種情況。我們有一些共享代號,指代不同類型的設備,屬性取決於它們所在的區域。

他們使用關聯表的理由如下:

  1. 數據保護。關聯表受程式碼表保護。但我認為在這種情況下這不會增加任何價值。還有其他表連接到 EQUIP_CD 來保護它。
  2. 未來的靈活性。這對我來說是可以理解的。
  3. 最佳實踐。是嗎?

所以我的問題..將關聯表用於一對多關係的最佳實踐嗎?除了上述三個之外,這種設計還有其他理由嗎?

我不想挑戰我的同事,只是進一步學習。先感謝您!

更新:數據模型正在修復,我們正在擺脫那些關聯表。

對於簡單的情況,你是對的,沒有必要為 one<->many 關係設置單獨的連結表。

在我的腦海中,我只能想到幾個例子,其中可能需要為關係建立一個單獨的表:

  • 如果您正在跟踪行的歷史記錄(在您的業務邏輯層中,通過觸發器,或者如果 Oracle 支持它們,則為“臨時表”)並且您不想在設備表中跟踪更改的關係屬性本身。可能是您描述的那些程式碼,或者可能是目前負責在該位置維護設備的人員。
  • 如果您設想以後需要支持多<->多關係。

儘管在這種情況下這似乎不太可能。

  • 如果您必須在需要所有關係的連結表的遺留框架中支持一些奇怪的東西(這似乎是合理的,因為您已經描述了需要解決其他遺留的奇怪問題)。
  • 以這種方式工作是一種簡單的本地實踐(顯然這並不是一個好主意,但它可能會讓你無權對抗!)

引用自:https://dba.stackexchange.com/questions/230488