チャットアプリケーションの要件定義・中間テーブル

テーブルとテーブルの多対多の関係を表す関連テーブル Ruby on rails

こちらでは、チャット機能のある、LINEメッセンジャーを例としてチャットアプリケーションの概要と要件定義をします。

まず、必要な機能を確認しましょ。

  1. ログイン/ログアウト
  2. チャットルームを作る
  3. メッセージを送る(テキスト・写真など)

単純に書くとこちらの3つの操作が必要です。

次、チャットアプリケーションの概要と要件定義を整理しましょ。

上記のチャットアプリで必要となるテーブルを考えましょ。

  1. ユーザー管理機能(新規登録・ログイン・ログアウト機能)
  2. チャットルーム管理機能(新規作成・削除機能)
  3. メッセージ管理機能(テキスト投稿・画像投稿機能)

これらの機能に必要なテーブルは、

  • usersテーブル
  • roomsテーブル
  • messagesテーブル
一つのユーザーは多数のルームに参加できる・一つのルームには多数のユーザーがいる

今回のような、「ユーザーは複数のルームに所属する」「ルームには複数ユーザーが所属する」という場合の関係性を多対多と言います。ここで問題なのは、1つのカラムに対して複数の値を保存することはできないことです。

方法として、関連するidが増えるごとにカラムを増やすということは可能ですが、そうすると無駄なカラムが発生してしまいます。

この問題を解決してくれるのが、「中間テーブル」です。

(英語:join table)

例としてインスタグラムをみましょ。一つの写真に複数のタグ付けができます。
このようなタグ付け機能を実現するには3つのテーブルが必要です。タグを保存するテーブル、写真を保存するテーブル、どの写真にどのタグが登録されているかを保存するテーブル。

  • tags テーブル
  • posts テーブル
  • post_tags テーブル (中間テーブル)

中間テーブルは、多対多の関係にある2つのテーブルの間に挟まって、2つの組み合わせパターンだけをレコードとして保存します。2つのモデルのみでは多対多のアソシエーションを組むことができないことから、 中間テーブルを利用して多対多の関係を定義します。

テーブルの実装については、他のカリキュラムで説明させていただきます。

今回は多対多のアソシエーションについて理解するようにしましょ。

まとめると。

チャットアプリケーションの要件定義をしてみること

多対多のアソシエーションには中間テーブルを使用して2つの組み合わせパターンを作ること

実行できたらテストコードも忘れずに!

結合テストコード・必須メソッド一覧

テストコードで検証しよう

<strong><code>Contrexmind </code>/コントマイ</strong>
Contrexmind /コントマイ

韓国と日本の大学でアパレルデザイン・CADを専攻、パタンナーとして活動。
その後、企画・MD部署に配属されビジネス業務に従事。
IT企業に移りビジネスデベロップメントチームで、 PMとしての経験を積む。
2018年グローバルIT企業の日本法人立ち上げの責任者を務め、現在はビジネスディレクターとして活動中。
副業コンテンツブロガー

ホーム » join_table

コメント

友だち追加
タイトルとURLをコピーしました