見出し画像

[output] 多対多 の DB設計

多対多の関係をもつテーブルがある場合、カラムに問題が生じる。

お互いに相手テーブルのidを複数持っているが、1つのカラムに複数の値を入れられない。
かといってidごとにカラムを増やしてしまうと、レコードによっては不要なカラムが生じてしまう。

それを解決する方法として、中間テーブルの活用がある。

中間テーブルとは、2つのテーブル間にあるテーブルのこと。
2つのテーブルの組み合わせパターンだけをレコードとして保存する。

この場合、モデルのアソシエーションにはthroughオプションを用いて表現する。

has_many :models, through: :middle_tables

throughは、has_manyメソッドのオプションで、
多対多の関係を示す際に、middle_tableを経由しますよ〜という意味となる。

この様な形で、テーブル・カラム・アソシエーションが決まったら、
ER図に落とし込む。


ER図の作成は、ツールを用いいると便利。
VScodeの拡張オプションである
「Draw.io Integration」や「Lucidchart」などがある。

Draw.io Integrationの導入方法は、vscode拡張機能で検索し、インストールする。

ER図を作成したアプリをVScodeで開き、.dioファイルを作成する。

作図方法は、下記の通り。
・左サイドバー下の「+その他の図形…_」を選択。

画像1

・ソフトウェアのERにチェックを入れ適用。

画像2

・左サイドバーにERのトグルが追加される。

画像3

・そこからドラッグ&ドロップで方眼紙へ設置。(クリックでも可能)

あ

・リレーションは、テーブル端にカーソルで緑の丸が表示されたらドラッグで設置可能。

・リレーションの形・サイズは、右ウィンドウで変更可能。

また、作成したER図を画像として保存する方法は下記の通り。
・ファイルタブから
・Exportを選択
・.png~を選択
・保存場所を決めて保存

または、はじめにファイルを作成する際に、
拡張子を.drawio.pngにすると画像として保存される。

ただし、一度ファイルを作成した後に拡張子を変更すると、
作成したER図は消えてしまうことに留意する。