任何人都可以向我解释(HABTM或多对多)“具有和属于许多”原理的作品吗?说我有一个用户表和书籍表,然后我有一个表users_books
其中的ID。我什么时候需要实际使用这个原则,它将如何工作?任何人都可以向我解释HABTM原理的工作原理吗?
回答
你问你为什么需要多对多的关系(这是什么HABTM)?
在上面提到的情况下,用户可能拥有很多书籍 - 如何在数据库中表示该书籍假设您有两张表格,书籍和用户,则在用户表格中,您无法为每本书添加一列用户可能拥有的每本书,因为您不知道拥有图书数量的上限是多少。您可以添加一个名为'books'的列,并在此列中存储'书籍集合'(可能以XML或逗号分隔),但这会使很多数据库查询变得很困难(例如识别用户拥有的单独书籍)。
书本表也是如此,有多少用户拥有某本书?再次,您无法知道最前面的内容,因此您无法将多个“用户”列添加到书籍表中,而将一组“用户”列添加到用户集合中也无济于事。
解决这个问题的方法是添加一个'join'表,usersbooks说,它包含两列,一个用户标识和一个bookid。此表将用户链接到书籍。所以,如果我有两个用户ID为1和2以及三本书id为101,102和103的连接表可能看起来像:
userid bookid 1 101 2 101 2 103
这就是users_books来在HABTM - 这是加入之间的表用户和书籍。
ħ为甲 ND 乙 elongs Ťö中号任何处理许多到数据库中的表之间一对多的关系。在你的情况下,它会处理用户和书籍之间的关系,因为一个用户可以有很多书,一本书可以有很多用户。
本博客文章看起来像概念的一个很好的解释和说明:
has_and_belongs_to_many:HABTM在Rails的
http://sumanthtechsavvy.blogspot.com/2008/03/hasandbelongstomany-habtm-in-rails.html
没错。我明白那个。我只是看不到这一点。为什么不把它合并到一个表中,它在应用程序意义上是如何工作的? – openfractal 2009-08-01 06:32:39
Rails的协会指导的This section有一些有关在Rails中工作的方式的良好信息。如果您需要存储关于该关联本身的更多信息,则还应该考虑through association的可能性。维基百科对多对多数据模型的基本概念有一个brief article,这些数据模型也可能具有启发性。
- 1. 有人可以向我解释'sigaction'的工作原理吗?
- 2. 任何人都可以解释BufferedInputStream的原理吗?
- 3. 任何人都可以解释PHP中uksort()的工作原理吗?
- 4. 任何人都可以解释这种除法算法的工作原理吗?
- 5. 有人可以帮我理解XCode的工作原理吗?
- 6. 有人可以向我解释这个程序的工作原理吗?
- 7. 有人可以向我解释这段代码的工作原理吗?
- 8. 有人可以解释这个代码的工作原理吗?
- 9. 有人可以解释这个JavaScript的工作原理吗?
- 10. 有人可以解释这种递归的工作原理吗?
- 11. Javascript原型怪癖 - 任何人都可以解释一下吗?
- 12. 有人可以向他解释这段代码的工作原理吗?
- 13. 有人能解释我rayCast的工作原理吗?
- 14. 有人可以解释我这个代码的工作原理吗? (回文C++)
- 15. 任何人都可以举例说明tensorflow中tf.contrib.metrics.streaming_mean_iou的工作原理吗?
- 16. 任何人都可以指向一个winforms原型工具吗?
- 17. 任何人都可以解释CRC在这个特定情况下的工作原理吗?
- 18. 任何人都可以用C++解释事件处理吗?
- 19. 任何人都可以解释OAuth吗?
- 20. 任何人都可以向我解释这个sed命令吗?
- 21. 任何人都可以用英语向我解释这个吗?
- 22. 任何人都可以向我解释这个SOQL查询吗?
- 23. 有人可以解释'&'在这种情况下的工作原理吗?
- 24. 有人可以解释这个Java代码片段的工作原理吗?
- 25. 有人可以解释这个asp代码的工作原理吗?
- 26. 有人可以解释Count在这个SQL查询中的工作原理吗?
- 27. 有人可以帮助解释抽象类WindowAdapter的工作原理吗?
- 28. 有人可以解释一下VIEWS&JOIN在SQL Server中的工作原理吗?
- 29. 有人可以解释这个函数的功能和工作原理吗?
- 30. 有人可以解释这个JavaScript/Angular代码的工作原理吗?
请解释缩写 – 2009-08-01 06:27:43
有属于很多 – 2009-08-01 06:50:06