Может кто-нибудь объяснить мне, как работает принцип HABTM?

StackOverflow https://stackoverflow.com/questions/1215963

Вопрос

Может ли кто-нибудь объяснить мне, как (HABTM или многие ко многим) "имеет и принадлежит многим"? принцип работает? Скажем, у меня есть таблица пользователей и таблица книг, а затем у меня есть таблица users_books , где находятся идентификаторы. Когда мне нужно будет использовать этот принцип и как он будет работать?

Это было полезно?

Решение

Вы спрашиваете, зачем вам нужны отношения многие-ко-многим (что такое HABTM)?

В случае, если вы упомянули выше, пользователь может иметь много книг - как вы представляете это в базе данных. Допустим, у вас есть две таблицы, книги и пользователи, в таблице пользователей вы не можете добавить один столбец на книгу для каждой. Книга, которой может владеть пользователь, поскольку вы не знаете, каков верхний предел количества книг в собственности. Вы можете добавить столбец с названием «книги» и сохранить «коллекцию» книг в этом столбце (возможно, в виде XML или через запятую), но это усложняет выполнение большого количества запросов к базе данных (например, определение отдельных книг, принадлежащих пользователю).

То же самое относится и к таблице книг: сколько пользователей владеют определенной книгой? опять же, вы не можете знать заранее, поэтому вы не можете добавить несколько столбцов «пользователь» в таблицу книг, и добавление одного столбца «пользователи» с набором пользователей не поможет.

Решением этой проблемы является добавление таблицы 'join', как утверждают пользователи, которая содержит два столбца: идентификатор пользователя и идентификатор книги. Эта таблица связывает пользователей с книгами. Поэтому, если у меня есть два пользователя с идентификаторами 1 и 2 и три книги с идентификаторами 101, 102 и 103, таблица соединения может выглядеть следующим образом:

userid  bookid
1       101
2       101
2       103

Именно здесь в HABTM входят users_books - это таблица соединений между пользователями и книгами.

Другие советы

H как A и B удлиняет T или M любой обрабатывает отношения многие ко многим между таблицами в базе данных. В вашем случае он будет обрабатывать отношения между пользователями и книгами, поскольку у одного пользователя может быть много книг, а у одной книги может быть много пользователей.

альтернативный текст

Этот пост в блоге выглядит довольно хорошим объяснением и иллюстрацией концепции:

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

Этот раздел из Руководство по ассоциациям Rails содержит полезную информацию о том, как это работает в Rails. Вам также следует рассмотреть возможность создания через ассоциацию , если вам нужно сохранить больше информации о самой ассоциации. В Википедии есть краткая статья об основной концепции многих ко многим моделям данных, которые также могут оказаться поучительными.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top