2011-03-28 81 views
0

目前我有多個N:2個表之間m關係:多個多個到多個關係之間的相同表或與識別屬性的n:m關係?

Users --> Favourites(user_id,post_id) <-- Posts 
Users --> Follow(user_id,post_id)  <-- Posts 

你願意有2個連接表或只是一個與這標誌着聯接類型的屬性連接表,所以像:

Users --> Users_Posts (user_id,post_id,type(VALUES="favourite,follow") <-- Posts 

這與我在應用程序中的示例並不完全相同,但我認爲您可以明白。

回答

1

我不認爲這裏有一個「正確的」答案。我認爲它取決於。如果您使用帶有「關係類型」列的單個表,並且經常只想提取單一類型的關係(比如說最愛),那麼針對該表的每個查詢都需要應用WHERE子句來篩選出您的類型不要想要。如果您沒有正確索引非關鍵「關係類型」列,那麼這可能會導致查詢速度緩慢。此外,它使得未來的開發人員總是需要知道並記住過濾到他們想要的類型,或者他們可能意外地獲得了他們不打算的關係數據。有兩個單獨的表更容易理解。例如,我更容易快速知道「收藏夾」表中的內容要比「Users_Posts」表中的內容要多,因此單獨的表格可能會更快地傳達差異。另一方面,如果您經常需要選擇這兩個關係類型在一個集合中,那麼將它們放在一個表中更簡單,因爲您不需要擔心使用UNION來組合數據從兩張桌子變成一張單一的視圖。如果有10,000種不同的可能的關係類型呢?你想要10,000張不同的桌子,還是你喜歡單桌?在這種情況下,大多數人會喜歡單桌。

所以我認爲這取決於許多因素,如預期的用法,大小等。「正確」的答案更多的是藝術而不是科學。

相關問題