2012-04-19 111 views
2

我有兩個表:如何關聯兩個表中的多行?

表1:

id(int) | stuff(text) 
------------------------- 
1  | foobarfoobarfoo 
2  | blahfooblah 
3  | foo 

表2:

id(int) | otherstuff(text) 
-------------------------- 
1  | foo 
2  | bar 
3  | blah 

在表1中的行可有不止一個的foo,酒吧等。並且,表2中的每一行可以出現在table1的多行中。

這是保持直線的更好方法。我應該創建第三個表是這樣的:

表3:

id_from2(int) | id_from1(int) 
----------------------------- 
1    | 1 
1    | 2 
1    | 3 
2    | 1 
3    | 2 

或者,我應該有類型的磁盤陣列添加到Table 1和表2的列來跟蹤相同的信息?

+0

取決於您的數據庫系統和數據模型,但最有可能創建中間表將是最佳解決方案。 – 2012-04-19 15:40:33

回答

5

是的,使用聯結表是在RDBMS中實現多對多關係的正確方法。

如果需要,您可以將更多屬性添加到聯結表(即table3)。例如,如果訂購的關係是,則可以添加指定(table1, table2)組合的排序的第三個字段。下面是一個link的Stack Overflow的答案,它給出了一個多對多表的很好的詳細示例。

+0

感謝您的幫助!這是我需要的。 – Utkonos 2012-04-19 16:26:09

2

這是一個標準的Many-To-Many設計,如您所示,最靈活的解決方案將是第三個帶有id關聯的表格。

0

關係表是關聯多對多關係的最佳方式。你做得很好。

0

所以你想要一個多對多的關係?表1中的一個與2中的更多對象有關係,反之亦然?是的,像你說的那樣使用第三張桌子,這是最佳做法。還附上一個主鍵自動增量列,只是爲了安全

+0

從什麼安全? – 2012-04-19 15:41:24

+0

@Shedal如果他增長了一個高級應用程序,他可以使用這個鍵來索引(尋址)一個關係,以防他想在其上構建一些事情 - 例如,添加不適合字段(列)的關係的元信息。我認爲這是ORM用於任何模型的模式。 – 2012-04-19 15:46:36

+1

難道他只需要創建一個關鍵字段就可以了嗎? – 2012-04-19 15:47:54

1

不能同意更多。您添加第三個表格的設計是正確的。