[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ファイルを作成する。
作図方法は、下記の通り。
・左サイドバー下の「+その他の図形…_」を選択。
・ソフトウェアのERにチェックを入れ適用。
・左サイドバーにERのトグルが追加される。
・そこからドラッグ&ドロップで方眼紙へ設置。(クリックでも可能)
・リレーションは、テーブル端にカーソルで緑の丸が表示されたらドラッグで設置可能。
・リレーションの形・サイズは、右ウィンドウで変更可能。
また、作成したER図を画像として保存する方法は下記の通り。
・ファイルタブから
・Exportを選択
・.png~を選択
・保存場所を決めて保存
または、はじめにファイルを作成する際に、
拡張子を.drawio.pngにすると画像として保存される。
ただし、一度ファイルを作成した後に拡張子を変更すると、
作成したER図は消えてしまうことに留意する。