2010-08-12 111 views
1

在許多數據庫設計教程/文章中,他們總是提出這樣一個事實,即如果兩個表共享多對多關係,則應該創建第三個表作爲一個聯繫表來鏈接這兩個。需要關聯表的多對多關係

然而,他們從不提供WHY我們應該這樣做的原因。我很好奇,想知道爲什麼,如果你只是保留了兩個表,因爲它是沒有關聯索引表可能發生問題和實例。

回答

2

使用關係數據庫,您無法以任何其他方式創建多對多關係。也就是說,如果你有一個名爲「人」的表,你不能創建一個「朋友」列,並期望把許多朋友的用戶ID放在那裏。你必須建立一個單獨的表來保存關係本身。

+0

不幸的是,你正在混淆術語「關係」和「關係」,這意味着兩件完全不同的事情。你當然不是唯一的一個,我注意到混淆這兩者的趨勢越來越普遍 - 但對於試圖瞭解關係模型的人來說,這一定是非常混亂的。 – sqlvogel 2010-08-12 10:58:04

+0

對不起。我與語言的關係是「一對多」,我是一個人,語言很多。 (而英文不是我的第一個) – Jonny 2010-08-12 16:13:23

0

如果您不創建第三個表,則無處存儲關係。

通過一對一或一對多關係,您可以將關係存儲在其中一個表中。有了多對多的關係,你必須分開存儲關係。 (當然,理論上你店作爲一個逗號分隔兩個表中的身份列表中,但是這將是一場噩夢使用和維護。)

0

如果DB-Server可以爲您創建第三個表,它將不會靈活。是否會有這樣的一個解決方案,你不會有多大的影響力

  • 變化關係水煤漿在assoc命令

  • 店等關聯信息。表

  • 性能增強

  • 存儲增強

2

在關係數據庫中的所有關係都代表了只有一個:爲關係(關係對應表中的SQL)。與兩個屬性(例如R {A,B})的關係表示A和B之間的二元關係。例如,該關係可以是一對多或多對多關係。

如果由R {A,B}表示的關係是多對多的,這意味着A或B都不是候選鍵(因爲如果其中任一個是唯一的,那麼對於該屬性的每個值顯然只有一個元組將是允許的)。這意味着第三範式的原則需要依賴於A或B的任何屬性才能進入其他表格。其原因是非關鍵依賴關係(依賴於A或B的屬性)是一種冗餘形式,可能導致異常和錯誤結果。

所以這並不是說「多對多關係」與其他關係有任何不同。只是規範化常常導致帶有複合鍵的表的常見模式,而沒有其他非鍵屬性。有些人喜歡把這種模式稱爲關聯表 - 儘管我個人覺得這個術語沒有什麼幫助。