4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

中間テーブルとは??

Posted at

## プログラミング初学者が学習する中間テーブルについて

  • Railsなどのフレームワークを学習していて『中間テーブル』という言葉がよくわからなかったので備忘録も兼ねて解説します! (初投稿なので温かく見守ってください泣)

  • 中間テーブルってなんなの??

  • 具体的な使い方

中間テーブルってなんなの??

中間テーブルとは・・・データベースで、テーブルとテーブルの多対多の関係を表すテーブルのこと。

これだけ言われてもパッとしないかもしれません。イメージしてみましょう!

データベースにuserテーブルとgroupテーブルというのが存在すると仮定します。

userテーブル

id name
1 山田
2 佐藤
3 鈴木
4 田中

groupテーブル

id group-name
1 Aグループ
2 Bグループ
3 Cグループ
4 Dグループ

以上二つのテーブルから誰がどのグループに属しているかを表現してみると、、

id name group
1 山田 Bグループ
2 佐藤 Cグループ
3 鈴木 Aグループ
4 田中 Cグループ

このようにuserテーブルにgroupカラムを追加することで解決できます。

しかし!

userがいくつものgroupに所属できるようにしたい!と考えました
*例えば通話アプリの『LINE』でも複数の『グループ』に所属できますよね!

すると、、

userテーブル

id name group1 group2 group3 group4
1 山田 Bグループ Cグループ Aグループ
2 佐藤 Cグループ Aグループ Dグループ Bグループ
3 鈴木 Aグループ
4 田中 Cグループ Bグループ
これじゃ、空のカラムが大量発生するじゃないか!!!(親父ギャグ)
  • カラムどんだけ追加しないとダメなんだ・・・
  • DB設計時にどれだけカラムを用意しなければならないんだろう・・・予測できない・・
  • 空のカラムはエラーの元じゃないか・・・

####ここで登場するのが 中間テーブル です

##中間テーブルの具体的な使い方

userテーブル

id name
1 山田
2 佐藤
3 鈴木
4 田中

groupテーブル

id group-name
1 Aグループ
2 Bグループ
3 Cグループ
4 Dグループ

新たに以下のテーブルを追加!

group_userテーブル

id user group
1 山田 Bグループ
2 山田 Cグループ
3 山田 Aグループ
4 佐藤 Cグループ
5 佐藤 Aグループ
6 佐藤 Dグループ
7 佐藤 Bグループ
8 鈴木 Aグループ
  1. このように中間テーブルを追加することで空のカラムもなくなり、その都度追加する必要があったカラムも追加せずに済むことができます。さらに誰がどのグループに所属しているかが見やすくなりました。

  2. データベースの設計をしていく際には空のカラムが発生しないか、チームとして開発を進めていく中で見やすいDBができているかを考える必要があると思うので覚えておきましょう!!!

初投稿となりましたが、何かわかりにくい点や誤って理解してしまっている点などあればご教授願います。では!

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?