2009-08-01 92 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,这些数据模型也可能具有启发性。

相关问题