
こちらでは、チャット機能のある、LINEメッセンジャーを例としてチャットアプリケーションの概要と要件定義をします。
まず、必要な機能を確認しましょ。
- ログイン/ログアウト
- チャットルームを作る
- メッセージを送る(テキスト・写真など)
単純に書くとこちらの3つの操作が必要です。
次、チャットアプリケーションの概要と要件定義を整理しましょ。
上記のチャットアプリで必要となるテーブルを考えましょ。
- ユーザー管理機能(新規登録・ログイン・ログアウト機能)
- チャットルーム管理機能(新規作成・削除機能)
- メッセージ管理機能(テキスト投稿・画像投稿機能)
これらの機能に必要なテーブルは、
- usersテーブル
- roomsテーブル
- messagesテーブル

今回のような、「ユーザーは複数のルームに所属する」「ルームには複数ユーザーが所属する」という場合の関係性を多対多と言います。ここで問題なのは、1つのカラムに対して複数の値を保存することはできないことです。
方法として、関連するidが増えるごとにカラムを増やすということは可能ですが、そうすると無駄なカラムが発生してしまいます。
この問題を解決してくれるのが、「中間テーブル」です。
(英語:join table)

例としてインスタグラムをみましょ。一つの写真に複数のタグ付けができます。
このようなタグ付け機能を実現するには3つのテーブルが必要です。タグを保存するテーブル、写真を保存するテーブル、どの写真にどのタグが登録されているかを保存するテーブル。
- tags テーブル
- posts テーブル
- post_tags テーブル (中間テーブル)
中間テーブルは、多対多の関係にある2つのテーブルの間に挟まって、2つの組み合わせパターンだけをレコードとして保存します。2つのモデルのみでは多対多のアソシエーションを組むことができないことから、 中間テーブルを利用して多対多の関係を定義します。
テーブルの実装については、他のカリキュラムで説明させていただきます。
今回は多対多のアソシエーションについて理解するようにしましょ。
まとめると。
チャットアプリケーションの要件定義をしてみること
多対多のアソシエーションには中間テーブルを使用して2つの組み合わせパターンを作ること
実行できたらテストコードも忘れずに!
コメント