Saka_engineerの日記

A fledgling engineer write a diary for output.

中間テーブルについて、

 中間テーブルとは

 多対多の関係では、アソシエーションを組むことができないため、

中間にもう一つテーブルを設けて、アソシエーションを組むというもの。

 

 例えば、

部屋はひとつだけど、そこを利用する人はたくさんいる。

これは部屋が単一に対して、人が多数いるというhas_manyの関係

 例えば、

この記事は僕が書いたもの。

つまりこの記事は僕に帰属するので、一対一のbelongs_toの関係。

 

では、多対多の関係はどうするのか。

 例えば、ラインのオープンチャットなんかは、

たくさんのチャットルームがあって、

たくさんのユーザーが利用する。

 

こういった時に、

ユーザーテーブルとチャットルームのテーブル、二つの中間テーブルを作る。

具体的には、ユーザーテーブルにあるユーザーIDとチャットルームにあるチャットIDを中間テーブルに記憶しておくことができる。

 

では中間テーブルと他のテーブルをつなぐ時は?

 

こういう時には 

Reference型という中間テーブル用のカラムの書き方があって、

referencesとは、他テーブルから情報を参照する際に用いる型です。

中間テーブルと他のテーブルとのアソシエーションを組む時に使用します。

 

これを使用することで、foreign_key: true という外部キーの制約をつけることができ、エラーが起きない仕組みにすることができます。

これは何かというと、両方のIDがないとデータベースに保存できませんよという制約になります。

制約をつけることで、正しく中間テーブルの情報を保持できるので、エラーすることなく他のテーブルとのアソシエーションを組むことができる。