2009-08-13 374 views
6

我目前有一個數據庫,其中有兩個表稱爲文章和標籤。爲了讓文章分爲多個類別,我有多對多的關係。在性能方面有這樣的設計是錯誤的嗎?或者我應該刪除這兩個表之間的關係,並添加第三個表作爲橋樑(articlesTags)?數據庫設計中的多對多關係

+8

如何在不使用articlesTags表的情況下創建多對多關係? – flayto 2009-08-13 18:24:20

+2

如果你有多對多的關係,你需要第三張表格來代表 - 沒有明智的選擇。如果你的數據庫管理系統支持,你最近的方法可能是每個表中的SET結構。但是對於這種類型,通常沒有太多的表間檢查 - 單獨的表是必要的。 – 2009-08-13 19:14:22

回答

15

擁有多對多關係本身並沒有什麼錯誤,您只需要創建一個Junction Table(這聽起來就像您指的是articlesTags)以促進這種關係。

+3

也稱爲交集表。 – APC 2009-08-14 13:03:08

+0

我想要一個明智的抽象。這種自行創建和自我管理的聯接表malarkey已經持續了很長時間。 – Brandon 2011-09-08 02:35:57

+0

@APC或一個聯接表(至少在JPA中) – 2012-02-12 14:19:28

1

如果這是數據所要求的,那麼建立多對多關係沒有問題,但是您需要第三個表來表示它。

+2

我會說「你需要第三張桌子。」 – Dave 2009-08-13 18:26:42

2

有使用許多沒問題許多關係。它通常是必需的。

是的,無法使用第三個表創建多對多關係。

6

您將看到概念數據庫設計(N:N關係)與物理實現之間的區別。不管你如何模擬你的N:N關係,你都需要上述的連接表來使它工作。

將真實世界的關係模擬爲與真實世界接近的一般性陳述並沒有錯。清晰是國王。

當談到任何系統中的任何性能問題時,答案通常歸結爲「取決於」。

如果你的性能問題與WRITES相關,那麼高度的NORMALIZED結構是最好的,你會需要該Junction表。你最終會寫更少的數據,並且可以大幅度提高速度(儘管你可能會在創建插入之前先進行查找來消化這些優勢)。從各個標準化表中讀取也可以非常快。

如果您的問題與分析性閱讀有關,那麼DENORMALISED結構是最好的。如果表格很大並且索引展開,連接可能會非常耗費性能。你會犧牲很多空間來獲得很多時間。

一般來說,在決定解決方案之前,您需要查看自己的具體情況並權衡每種方法的優缺點。就個人而言,如果我稍後發現問題,我總是發現在初始階段專注於清晰度並重構性能會更好。