Database design 谁能向我解释一下HABTM原理是如何工作的?

Database design 谁能向我解释一下HABTM原理是如何工作的?,database-design,has-and-belongs-to-many,Database Design,Has And Belongs To Many,有人能向我解释一下(HABTM或多对多)“拥有并属于多”原则是如何工作的吗?假设我有一个users表和books表,然后我有一个id所在的表users\u books。我什么时候需要实际使用这个原则以及它是如何工作的?H作为AndBelongsToM任何处理数据库中表之间的多对多关系的方法。在您的例子中,它将处理用户和书籍之间的关系,因为一个用户可以有多本书,而一本书可以有多个用户 这篇博文似乎是对这个概念的一个很好的解释和说明: 在Rails中拥有且属于多个:habtm HasAndBelo

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

H作为AndBelongsToM任何处理数据库中表之间的多对多关系的方法。在您的例子中,它将处理用户和书籍之间的关系,因为一个用户可以有多本书,而一本书可以有多个用户

这篇博文似乎是对这个概念的一个很好的解释和说明:

在Rails中拥有且属于多个:habtm

HasAndBelongsToM任意处理数据库中表之间的多对多关系。在您的例子中,它将处理用户和书籍之间的关系,因为一个用户可以有多本书,而一本书可以有多个用户

这篇博文似乎是对这个概念的一个很好的解释和说明:

在Rails中拥有且属于多个:habtm

《Rails Associations guide》(Rails Associations guide)中的提供了一些关于Rails工作方式的好信息。您还应该考虑在需要存储关于关联本身的更多信息的情况下的可能性。Wikipedia对多对多数据模型的基本概念进行了详细介绍,这些数据模型也可能具有指导意义。

的Rails Associations guide(Rails Associations guide)提供了一些关于如何在Rails中工作的好信息。您还应该考虑在需要存储关于关联本身的更多信息的情况下的可能性。Wikipedia对多对多数据模型的基本概念有一个很好的理解,这可能也很有启发性。

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

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

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

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

userid bookid 1 101 2 101 2 103 用户标识bookid 1 101 2 101 2 103
这就是HABTM中用户书籍的作用所在——它是用户和书籍之间的连接表。

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

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

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

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

userid bookid 1 101 2 101 2 103 用户标识bookid 1 101 2 101 2 103
这就是HABTM中用户书籍的作用——它是用户和书籍之间的连接表。

对。我明白。我只是不明白重点。为什么不将它合并到一个表中,以及它在应用程序意义上是如何工作的呢?这实际上是关系数据库中比较常见的模式。Ruby群组只是给它起了一个特别的名字,但这总是你处理多对多关系的方式。您总是需要一个“链接表”来关联这两个表。它在应用程序意义上的工作原理:想想学校注册。您需要在链接表中为每个学生/班级组合创建一条记录。对。我明白。我只是不明白重点。为什么不将它合并到一个表中,以及它在应用程序意义上是如何工作的呢?这实际上是关系数据库中比较常见的模式。Ruby群组只是给它起了一个特别的名字,但这总是你处理多对多关系的方式。您总是需要一个“链接表”来关联这两个表。它在应用程序意义上的工作原理:想想学校注册。对于每个学生/班级组合,链接表中需要一条记录。这样一个用户可以拥有多本书?这看起来或工作起来如何?通过联接表。我试图在回答中举例说明,但格式弄错了。假设用户1在联接表中有两个图书%2C,将有两行,第一行的userid=1和bookid=101,第二行的userid=1 bookid=102。对于用户2,您将有userid=2 bookid的行