2009-08-01 81 views
1

任何人都可以向我解釋(HABTM或多對多)「具有和屬於許多」原理的作品嗎?說我有一個用戶表和書籍表,然後我有一個表users_books其中的ID。我什麼時候需要實際使用這個原則,它將如何工作?任何人都可以向我解釋HABTM原理的工作原理嗎?

+1

請解釋縮寫 – 2009-08-01 06:27:43

+0

有屬於很多 – 2009-08-01 06:50:06

回答

3

你問你爲什麼需要多對多的關係(這是什麼HABTM)?

在上面提到的情況下,用戶可能擁有很多書籍 - 如何在數據庫中表示該書籍假設您有兩張表格,書籍和用戶,則在用戶表格中,您無法爲每本書添加一列用戶可能擁有的每本書,因爲您不知道擁有圖書數量的上限是多少。您可以添加一個名爲'books'的列,並在此列中存儲'書籍集合'(可能以XML或逗號分隔),但這會使很多數據庫查詢變得很困難(例如識別用戶擁有的單獨書籍)。

書本表也是如此,有多少用戶擁有某本書?再次,您無法知道最前面的內容,因此您無法將多個「用戶」列添加到書籍表中,而將一組「用戶」列添加到用戶集合中也無濟於事。

解決這個問題的方法是添加一個'join'表,usersbooks說,它包含兩列,一個用戶標識和一個bookid。此表將用戶鏈接到書籍。所以,如果我有兩個用戶ID爲1和2以及三本書id爲101,102和103的連接表可能看起來像:

 
userid bookid 
1  101 
2  101 
2  103 

這就是users_books來在HABTM - 這是加入之間的表用戶和書籍。

2

ħ ND elongs Ťö中號任何處理許多到數據庫中的表之間一對多的關係。在你的情況下,它會處理用戶和書籍之間的關係,因爲一個用戶可以有很多書,一本書可以有很多用戶。

alt text

本博客文章看起來像概念的一個很好的解釋和說明:

has_and_belongs_to_many:HABTM在Rails的
http://sumanthtechsavvy.blogspot.com/2008/03/hasandbelongstomany-habtm-in-rails.html

+0

沒錯。我明白那個。我只是看不到這一點。爲什麼不把它合併到一個表中,它在應用程序意義上是如何工作的? – openfractal 2009-08-01 06:32:39

0

Rails的協會指導的This section有一些有關在Rails中工作的方式的良好信息。如果您需要存儲關於該關聯本身的更多信息,則還應該考慮through association的可能性。維基百科對多對多數據模型的基本概念有一個brief article,這些數據模型也可能具有啓發性。

相關問題