1

谁能向我解释(HABTM 或多对多)“拥有并属于许多”原则是如何工作的?假设我有一个 users 表和 books 表,然后我有一个users_booksID 所在的表。我什么时候需要实际使用这个原则,它是如何工作的?

4

3 回答 3

3

您是否在问为什么需要多对多关系(这就是 HABTM)?

在您上面提到的情况下,用户可能拥有许多书籍 - 您如何在数据库中表示它假设您有两个表,书籍和用户,在用户表中,您不能为用户的每本书每本书添加一列可能拥有,因为您不知道拥有书籍数量的上限是多少。您可以添加一个名为“书籍”的列并在该列中存储书籍的“集合”(可能以 XML 或逗号分隔),但这会使大量数据库查询变得困难(例如识别用户拥有的单本书籍)。

books 表也是如此,有多少用户拥有一本书?同样,您无法预先知道,因此您无法将多个“用户”列添加到书籍表中,并且添加一个包含用户集合的单个“用户”列也无济于事。

这个问题的解决方案是添加一个“加入”表,用户手册说,它包含两列,一个用户 ID 和一个 bookid。该表将用户链接到书籍。因此,如果我有两个 id 为 1 和 2 的用户以及三本 id 为 101、102 和 103 的书,则连接表可能如下所示:

用户名 bookid
1 101
2 101
2 103

这就是 HABTM 中 users_books 的用武之地——它是用户和书籍之间的连接表。

于 2009-08-01T06:34:37.703 回答
2

H as A nd B属于T o M any 处理数据库中表之间的多对多关系。在您的情况下,它将处理用户和书籍之间的关系,因为一个用户可以有很多书,而一本书可以有很多用户。

替代文字

这篇博文看起来是对这个概念的一个很好的解释和说明:

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

于 2009-08-01T06:27:44.580 回答
0

Rails Associations 指南的这一部分有一些关于它在 Rails 中的工作方式的很好的信息。如果您需要存储有关关联本身的更多信息,您还应该考虑通过关联的可能性。Wikipedia 有一篇关于多对多数据模型基本概念的简短文章,也可能具有启发性。

于 2009-08-01T06:33:13.790 回答