在許多數據庫設計教程/文章中,他們總是提出這樣一個事實,即如果兩個表共享多對多關係,則應該創建第三個表作爲一個聯繫表來鏈接這兩個。需要關聯表的多對多關係
然而,他們從不提供WHY我們應該這樣做的原因。我很好奇,想知道爲什麼,如果你只是保留了兩個表,因爲它是沒有關聯索引表可能發生問題和實例。
在許多數據庫設計教程/文章中,他們總是提出這樣一個事實,即如果兩個表共享多對多關係,則應該創建第三個表作爲一個聯繫表來鏈接這兩個。需要關聯表的多對多關係
然而,他們從不提供WHY我們應該這樣做的原因。我很好奇,想知道爲什麼,如果你只是保留了兩個表,因爲它是沒有關聯索引表可能發生問題和實例。
使用關係數據庫,您無法以任何其他方式創建多對多關係。也就是說,如果你有一個名爲「人」的表,你不能創建一個「朋友」列,並期望把許多朋友的用戶ID放在那裏。你必須建立一個單獨的表來保存關係本身。
如果您不創建第三個表,則無處存儲關係。
通過一對一或一對多關係,您可以將關係存儲在其中一個表中。有了多對多的關係,你必須分開存儲關係。 (當然,理論上你能店作爲一個逗號分隔兩個表中的身份列表中,但是這將是一場噩夢使用和維護。)
維基百科的描述它。只要看看:http://en.wikipedia.org/wiki/Many-to-many_(data_model)
如果你仍然不相信多對多真的需要第三張表,那麼只需使用兩個規範化表格(參見維基百科文章中的作者/書籍考試) 。
如果DB-Server可以爲您創建第三個表,它將不會靈活。是否會有這樣的一個解決方案,你不會有多大的影響力
變化關係水煤漿在assoc命令
店等關聯信息。表
性能增強
存儲增強
在關係數據庫中的所有關係都代表了只有一個:爲關係(關係對應表中的SQL)。與兩個屬性(例如R {A,B})的關係表示A和B之間的二元關係。例如,該關係可以是一對多或多對多關係。
如果由R {A,B}表示的關係是多對多的,這意味着A或B都不是候選鍵(因爲如果其中任一個是唯一的,那麼對於該屬性的每個值顯然只有一個元組將是允許的)。這意味着第三範式的原則需要依賴於A或B的任何屬性才能進入其他表格。其原因是非關鍵依賴關係(依賴於A或B的屬性)是一種冗餘形式,可能導致異常和錯誤結果。
所以這並不是說「多對多關係」與其他關係有任何不同。只是規範化常常導致帶有複合鍵的表的常見模式,而沒有其他非鍵屬性。有些人喜歡把這種模式稱爲關聯表 - 儘管我個人覺得這個術語沒有什麼幫助。
不幸的是,你正在混淆術語「關係」和「關係」,這意味着兩件完全不同的事情。你當然不是唯一的一個,我注意到混淆這兩者的趨勢越來越普遍 - 但對於試圖瞭解關係模型的人來說,這一定是非常混亂的。 – sqlvogel 2010-08-12 10:58:04
對不起。我與語言的關係是「一對多」,我是一個人,語言很多。 (而英文不是我的第一個) – Jonny 2010-08-12 16:13:23