Mysql

連接/連接表是否總是必要的

  • March 25, 2021

我已經嘗試過尋找其他答案,到目前為止,我還沒有完全找到我所追求的。雖然關於聯結表有多個問題,但似乎沒有一個問題可以解決在一個表和其他 2 個具有多對多關係的表之間是否需要有一個聯結表,或者為什麼它是必要的。

例如,我有一個數據庫來儲存系統的路徑規範化數據。系統中有多個路徑,並且隨著時間的推移有多次標準化執行。

所以一個特定Normalisation Run的規範化多個不同Paths的,一個特定Path的規範化多個Normalisation RunsNormalisation Runs和之間的多對多關係Paths

Normalisation Data需要引用特定的,Normalisation Run但是可以將多個Normalisation Data記錄關聯到單個Normalisation Run,因此是一對多的關係。

Normalisation Data還需要引用特定的,Path但是可以將多個Normalisation Data記錄關聯到單個Path,因此又是一對多關係

還要澄清 2 個不同Normalisation Data的記錄可能指的是相同的 ( Normalisation Run-Path) 對

以下哪項是數據庫的最佳設計?

選項 1:使用接線表

使用聯結表的規範化數據庫設計

(或者)

選項 2:沒有連接表

沒有聯結表的規範化數據庫設計

以下是該Normalisation Data表的範例:

Path Runs在這種情況下,連接表真的有必要嗎,因為Normalisation Data沒有它,表仍將包含完全相同的數據。如果有必要,為什麼必須這樣做?

你不需要一個橋桌。

正如你所寫

Normalization Data 需要參考特定的 Normalization Run 和特定的 Path

所以你在規範化數據和規範化執行之間有 1:1 的關係並且你在規範化數據和路徑之間有 1:1 的關係

僅當標準化數據與其他兩個之間存在 m:n 關係時,您才需要一個。

Norm_Runs 和 Paths 之間存在多對多關係,對嗎?因此Normalisation Data(在選項 2 中)是必要的橋接表。

或者,您可以擺脫表格Paths並簡單地PathNormalisation Data. 如果 中的列確實更多Paths,則應忽略此建議。

我認為選項 1 中的符號是錯誤的,因此令人困惑。看起來Path RunsNormalization Data將會是 1:1。此時,請遵循以下一般規則:永遠不要有兩個表以 1:1 的關係;將它們結合起來。(也有例外,在某些情況下應該為了性能而進行拆分。)

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