ポケモンのデータ設計をしてみた

CYBIRDエンジニア Advent Calendar 13日目担当の @ohmiha です。
12日目は @ice_matcha3 さんによる「itamaeを用いたサーバの構成管理」でした。
0から環境を作っていくインフラチームの　ちからって　すげー！（ポケモンネタ）
皆さんもぜひご覧ください！

## 概要
みんなが知っているであろうポケモンについて、めっちゃ自己流のデータ設計しました。
（2021/06/29に社内向け記事で投稿したものの再掲になりますので、後日談がちょこちょこ入っております。）

## 目的
- もともとデータ設計に興味があった
- データ設計には個性が出ると聞いたので、いろいろな意見が聞けるかもと思った

## 仕様
- ポケモンの中でも初代（赤・緑・青）を使用
- ポケモンのシステム全体のデータ設計をしても冗長になるため、
「マサラタウンから出てすぐの1番道路で野生のポケモンにエンカウントした戦闘時」に必要なデータのみ
- 詳しい仕様はネットで見つけた攻略サイトに書いてある仕様を参考
- 隠しステータスはなし

▼参考にしたサイトたち
- [ポケモン 赤 緑 青 ピカチュウ 攻略 wiki 初代の仕様](http://pokemon1gb2rgbp.wiki.fc2.com/wiki/%E5%88%9D%E4%BB%A3%E3%81%AE%E4%BB%95%E6%A7%98)
- [ポケモン赤緑青ピカチュウ攻略 タイプ相性表](https://pokemon.g-takumi.com/type/)
- [【ポケモン初代】「ポッポ」の能力と入手方法【赤緑青ピカチュウ】](https://pokemon.gamepedia.jp/rgbp/monsters/44)

## データ設計
実際に作成したデータ設計書です。
[ポケモン　データ設計](https://docs.google.com/spreadsheets/d/1hjqoHiRa7xkeE2hVgWQ-pdCVe7JszT6x/edit?usp=sharing&ouid=107396014412821623712&rtpof=true&sd=true)（スプレッドシートに遷移します）

<details><summary>スプレッドシートの内容（画像貼ってるので長くなります）</summary>
<div>

概要
![スクリーンショット 2021-12-10 18.44.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299385/11091401-9eec-d41f-ad0e-fc9cc21788fa.png)

仕様メモ
![スクリーンショット 2021-12-10 18.44.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299385/ea044bf3-e683-6f67-fe0c-3435235d1fc9.png)

ポケモン図鑑マスタ
![スクリーンショット 2021-12-10 18.44.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299385/1a30c405-5f8b-de9b-0305-410cb012b69c.png)

出現ポケモンマスタ
![スクリーンショット 2021-12-10 18.44.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299385/713e800b-adaa-438a-af4b-2c8eed9fbcde.png)

ポケモンタイプマスタ
![スクリーンショット 2021-12-10 18.44.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299385/bf7b8187-f873-80e7-dbc6-f6341cda2089.png)

ポケモンタイプ相性マスタ
![スクリーンショット 2021-12-10 18.45.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299385/5200892c-71ea-635a-f75a-5a5d7ab10f12.png)

ボイスマスタ
![スクリーンショット 2021-12-10 18.45.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299385/63a5fd5d-95a9-a564-b4bf-8e3823375c8c.png)

ポケモン種族マスタ
![スクリーンショット 2021-12-10 18.45.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299385/2ca54cad-8f55-fc30-7ae1-7b17672a78ef.png)


技マスタ
![スクリーンショット 2021-12-10 18.46.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299385/36e60f8a-4e54-4c90-88d2-2451762b9f68.png)

効果の向き先マスタ
![スクリーンショット 2021-12-10 18.46.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299385/3c30b4a0-6a78-215c-0dc3-084adb4e1bb3.png)

ポケモン技マスタ
![スクリーンショット 2021-12-10 18.46.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299385/2fbcac53-c107-0acc-3fb1-4eb4d196c199.png)

技分類マスタ
![スクリーンショット 2021-12-10 18.46.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299385/fd73ad62-104b-146e-d6b2-9442b6dd37ed.png)

状態マスタ
![スクリーンショット 2021-12-10 18.46.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299385/8076c363-b918-f0b5-51fd-512596c11675.png)

アイテムマスタ
![スクリーンショット 2021-12-10 18.47.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299385/a703b484-7a36-d9b7-8b3d-7d67473da91f.png)

アイテムタイプマスタ
![スクリーンショット 2021-12-10 18.47.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299385/b02e04bc-8c99-9ea7-3602-699d39d5563e.png)

所持ポケモン
![スクリーンショット 2021-12-10 18.47.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299385/d3cfecc5-8536-2785-46f8-55ccb25f01d6.png)

所持ポケモンステータス
![スクリーンショット 2021-12-10 18.47.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299385/d40f9d56-688e-0e76-3ec5-c2c3d4857b55.png)

所持アイテム
![スクリーンショット 2021-12-10 18.47.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299385/3fb13f49-891e-1196-fd5c-05ae3f48c63a.png)


</div>
</details>

こちらはER図です。
![ad5fd1ea-a045-4a16-967c-038e673f7d8c-1534x1920r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299385/db2467f4-7aaa-bc94-2ead-eed3af6fdec8.png)
結構リレーションの線が多くなり見づらいですが、二角取りの要領で、線は基本二回までしか折れないという風に見ていただければと思います！

## 気をつけたこと
- なるべく正規化できる箇所は別テーブルに分けた
    - 「野生のポケモンにエンカウントした戦闘時」のみにフォーカスを当てすぎたデータ設計をしていたので、出現ポケモンの技や所持ポケモンは正規化しておりませんでした
    - この辺も含めて粗探しゲームしてみてください...笑

## さいごに
ポケモンのデータ設計どうなってるんだろう...？
昔のゲームだったらそんな難しくないかも...？
と思ってやってみましたが、初心者でもなんとなくなら作れることがわかりました！
ただ当初思っていたのよりテーブル数が多くなって、頭がパンクしかけました。
ポケモンめちゃくちゃ詳しい人であればもっとテーブルが増えると思うので、興味がありましたらぜひ作ってみてください！

次作り直すときにはindex周りも見てあげたいと思います！

明日のCYBIRDエンジニア Advent Calendar 2021 14日目は、 @cy-n_ao さんによる「Heroku＆Phaserでかんたん環境構築」です。
明日の記事もお楽しみに♪