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初心者練習に丁度よかった話