記事本文(そのままQiitaに貼ってOK)
はじめに
テーブル設計(ER図作成)の課題に取り組みました。
今回は diagrams.net(draw.io) を使ってER図を作り、画像をGitHubの answer.md とPull Request(PR)に貼って提出する流れまでを整理します。
同じようにER図課題に取り組む人の参考になれば嬉しいです。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
やったことの全体像
機能要件から必要なテーブルを洗い出す
各テーブルのカラムを最低限決める
1–N / N–N の関係を整理する
diagrams.net でER図を作成する
Gyazoで画像化して answer.md とPRに貼る
PR作成 → 提出
ーーーーーーーーーーーーーーーーーーーーーーーーーー
テーブルの洗い出し
最初に「名詞」を拾ってテーブル候補を出しました。
今回必要になったのは以下のようなテーブルです(例):
users(ユーザー)
surveys(アンケート)
choices(選択肢)
answers(回答)
categories(カテゴリ)
survey_categories(アンケート×カテゴリの中間)
lists(ユーザーのリスト)
list_surveys(リスト×アンケートの中間)
reminders(リマインド)
この時点では、まず 箱(テーブル名)だけ置くのがポイントでした。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
カラムは「最小限」で書く
ER図は設計の全体像を示すのが目的なので、型まで厳密に書かなくてもOKにしました。
(必要なら後で実装時に詰めれば良い)
例:users / surveys(シンプル版)
users
id
name
email
introduction
gender
age_group
crypted_password
salt
created_at
updated_at
surveys
id
user_id
title
description
multiple_select
start_at
end_at
target_gender
target_age_group
created_at
updated_at
1–N と N–N の考え方
ER図で一番迷ったのがリレーションです。
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
1–N(1対多)
「親1件に対して子が複数」という形。
例:users(1)— surveys(N)
surveys に user_id を持たせる(外部キーはN側)
N–N(多対多)
N–Nは 直接つなげず中間テーブル を挟みます。
例:surveys と categories は多対多なので、
survey_categories を作って
surveys 1 — N survey_categories
categories 1 — N survey_categories
という形にしました。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
diagrams.netでER図を作るときのコツ
1テーブル=1つの箱に統一する(箱の中にカラムを書く)
まず users / surveys のような「起点」から埋める
全部作り込むより「要件を満たす構造」を優先する
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
画像をGitHubに貼る(Gyazo)
ER図をスクショしてGyazoにアップロードし、URLをMarkdownで貼りました。
※ GitHubで「画像として認識されない」場合は、画像URLそのものを使う必要があることもある(表示確認が大事)。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
提出前のチェック
answer.md で画像が表示される
PR本文でも画像が表示される
チェックリストを付ける(セルフチェック済みにする)
マージはしない
この4つを満たしていれば提出として安心でした。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
まとめ
テーブル設計は「名詞の洗い出し」→「関係の整理」から始めると進めやすい
N–Nは中間テーブルを挟むのが鉄則
diagrams.net はER図作成に便利
提出は「画像がGitHub上で見えるか」を最後に必ず確認する
