info
初めまして。assu_mingです。
人生初めての記事なのでお手柔らかにどうぞ! *Twitter:@assu_ming
さて、
今回はオフィスにて「ER図とは?」を学ぶランチを開催しました🍔
ゲームのDBなんて考えたことが無いので、ER図アウトプットに至るまでを記事に残してあげようと思います。
今回は、リリース時に同僚みんなで遊んでいたスマホゲーム「マリオカート ツアー」を使って
マリカーのフレンドランキング画面を出すために必要なDB設計を考えます。
軽いランチなので、事前に参加者が通勤中の電車内で作成できるくらいのボリュームを目指しました。
データベースとは・・・?という初心者メンバーでもイメージしやすいように。
こういうアウトプットは初めてですが、徐々に慣れていきたいです。
【開催概要】
・参加者:ファッションIT企業のPM、エンジニア、事務・・・などなど
・開催時間:1時間(事前アウトプット作成:20〜30分程度)
・その後:SQLを初心者と書いてみるランチも実施しました。
→BigQueryがSQL初心者練習に丁度よかった話
🍄🍄🍄
0.初めに 「ER図」とは
Entity Relationship Diagramの略。
データベースのテーブルEntityと、テーブル同士の関連Relationshipを図に表したもので
主にデータベースのテーブル設計の際に用いられています。
ER図を見るだけでそのシステムが扱うデータ構造・関係性がわかるという重要な図です。
1.最終的に出したいイメージを考える
まず、初心者向けに最終ゴールイメージを持ってもらうために
どんなデータを取り出したいか? を考えます。
今回は既に結果画面があるので、この画面から出したいデータを箇条書きで取り出します。

・順位
・フレンド名
・バッジ
・スコア
・ランキング残り時間
これくらい。完全は目指しませんのでざっとでOK
(上位、所持アイテム強すぎて勝てない)
2.どんなデータが必要か列挙する
難しいので手書きします。ペンで書いた方がどんどん出てくる。(個人的見解)
電車内ならスマホでとりあえずぽちぽち書き出すだけでも。

3.時系列で並べる
2と3の順番は逆でも良いかなと思います。
フローが長いほど、時系列に沿って考える方が楽。
並べて仕分けしているうちに「あ、あれも必要かも...」が出てきたら都度増やします。

4.データのかたまり毎に分類してみる
今回は最後までペンでいきます✏️
この1かたまりをエンティティ(Entity)と呼びます。ER図のEですね。
今回細かく触れませんが、Entityの中身たちは属性(Attribute)と呼びます。

5.エンティティ同士の関係性を線でつなぐ
リレーション(Relationship)、ER図のR部分です。
親子関係にあるテーブルは必ず繋ぐ。
今回はランキング結果なので、ゴールに必要なエンティティだけ作ってるはず。

すると、浮いてしまっているエンティティがありました。(真ん中、下段2つずつ)
繋げるというのは、のちにSQLでクエリを書くときのJOINにあたります。
JOINするときは同じ意味を持つ項目同士をイコールで繋いだりするので、共通のidをエンティティ間で持つ必要があります。
とりあえず
何やら難しいですが、エンティティ同士を結びつける為にキーとなる項目が必要なんですね。
(じゃないとデータを正しく紐づけられなくなる)
【対処法】
id を振って → 足りない項目を増やして → 線で再び繋ぎます。
最終的に一人ぼっちのエンティティが居なくなりました。
(例:「プレー結果」「フレンド」などにユーザーIDを追加)

それっぽくなりました!
このままだとごちゃごちゃしているので、ちゃんとしたツールで図にします。
〜〜〜 🍄ここからは余裕があったらやる🍄 〜〜〜
6.それらしいカッコイイ項目名を付けてあげる(英語)
○○idとか、▲▲nameとか。ノリでOK
日本語(論理名)のままでも分かりやすいですが、今回はBigQueryでクエリを書けるようになりたい!という人もいたので英語変換しました。
(→その後:BigQueryがSQL初心者練習に丁度よかった話)
7.図に落とし込む
ER図作成ツールや、その他ツールを使って見やすい綺麗な図にします。
今回たまたま見つけたこちらで作成しました → WWW SQL Designer
⭕️:UIが可愛い。直感的。
❌:1対多を表す「鳥の足」マークが付けられない
(PlantUMLを使った人もいました。おすすめのWEB上ツールがあれば知りたい)
線だけ引くなら手軽にできました。完成!!

(1エンティティから線を複数出しているのは、いわゆる1対多の関係の「1」を意味します)
8.感想
人によってアウトプットの中身が違っていて楽しかった!
初心者ならではの視点もたくさんあり、開催側としてもとても参考になりました。
・ランキング集計スコアについて
予め計算して持っておく案もありました。
フレンドが100人いた場合「都度3コースのスコア合計を計算する時間がかかるかも」という考え。
そうすると、ランキングページの読み込み速度の短縮と、ルビー配布時に使えると。
初心者でこの負荷を考えるのはすごいなーと思いました。
(わいわいランチ会なので不正解なんてないです。良いアイデア!)
フレンドが20人も居ないから思いつかなかったな!フレンド増やそう!!!
追記
ER図ランチ🍔という気軽な会を提案してくださった社内の方々と
新卒で入った会社で1から教えてくれた方々へとても感謝するきっかけになりました。
最初にしてはちょっと難しかったかもしれないけれど。初ER図作り会楽しかった。
身近なサービスでなんとな〜くイメージして、意見を出し合うだけでも◎と思いました!
ちなみに:
UberEatsもみんなで注文ついでに考えたりもしました。美味しくて楽しいからやってみてね🍔
ご覧いただきありがとうございました。
★参加者の次のステップ記録はこちら。
→BigQueryがSQL初心者練習に丁度よかった話
