質問

(HABTM または多対多) 「多数を持ち、多数に属する」原則がどのように機能するかを説明できる人はいますか?users テーブルと Books テーブルがあり、さらにテーブルがあるとします。 users_books ID はどこにありますか。この原則を実際にいつ使用する必要がありますか?また、どのように機能するのでしょうか?

役に立ちましたか?

解決

多対多の関係が必要な理由を尋ねていますか(これがHABTMです)

上記の場合、ユーザーは多くの本を所有している可能性があります-データベースでそれをどのように表現するかたとえば、本とユーザーの2つのテーブルがある場合、usersテーブルでは、本ごとに1つの列を追加することはできません所有する書籍の数の上限がわからないため、ユーザーが所有する書籍。 「書籍」という列を追加し、この列に書籍の「コレクション」を保存することもできます(XMLまたはカンマ区切りとして)が、これにより多くのデータベースクエリが困難になります(ユーザーが所有する個々の書籍の識別など)。

書籍テーブルについても同じことが言えます。特定の書籍を所有しているユーザーの数は?繰り返しますが、事前に知ることはできないため、複数の「ユーザー」列を書籍テーブルに追加することはできません。また、ユーザーのコレクションを含む単一の「ユーザー」列を追加しても役に立ちません。

この問題の解決策は、useridとbookidの2つの列を含む「結合」テーブルを追加することです。この表は、ユーザーを書籍にリンクします。したがって、IDが1と2の2人のユーザーと、IDが101、102、103の3つの本がある場合、結合テーブルは次のようになります。

userid  bookid
1       101
2       101
2       103

ここがHABTMのusers_booksの出番です。これはユーザーと書籍の結合テーブルです。

他のヒント

H A および B T o M のいずれかがデータベース内のテーブル間の多対多の関係。あなたの場合、1人のユーザーが多くの本を持つことができ、1つの本が多くのユーザーを持つことができるので、ユーザーと本の間の関係を処理します。

alt text

このブログ投稿は、コンセプトの非常に良い説明とイラストのように見えます:

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

このセクション Rails Associations のガイドには、これが Rails でどのように機能するかに関する優れた情報が記載されています。の可能性も考慮する必要があります。 協会を通じて 関連付け自体に関する詳細情報を保存する必要がある場合。ウィキペディアには、 短い記事 多対多のデー​​タ モデルの基本概念についても説明します。これも有益であることがわかります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top