昨日、CRL Pocketでクラロワリーグの戦績情報を表示できるようになったとお知らせしました。
普段はあまり書かないのですが、テーマとして面白いかな?と思ったので、本記事では行ったデータベース(DB)のテーブル設計(論理設計)について書いてみようと思います。
※説明として分かりやすいように実際とは異なる部分があります。
目次
クラロワリーグの戦績情報
クラロワリーグ(アジア)の1試合(Matchと言います)は次のような形式で行われます。
- 2Set先取でMatchの勝利。
- Set1が2v2(協力バトル)、Set2が1v1。
- Set2が終わってSetが1対1の場合、Set3のKING OF THE HILL(KOH)が行われます。
- 4th PlayerはリザーバーとしてKOHには出場する事ができます。
- 各Setで双方がBAN(使用禁止)カードを指定します。
次に実際の対戦結果を見てみましょう。
- Set1とSet2は2Game先取で勝利。
- KOHは3人同士が1Gameずつの勝ち抜き戦を行う。
情報の関連を考える
戦績情報とは、どういう情報がどういう関連をしているか、というのを考えます。
※技術用語だと、この情報のことをエンティティ(entity)と言うらしいです
戦績の最小の単位がGameという事はすぐ分かります。
クラロワというゲームにおける1試合ですね。
すると、1Matchには複数Setあり、1Setには複数Gameあるという関係に気づきます。
ただ、これだけだと4th PlayerやKOHでエントリーはしたけど試合はしなかった選手の情報が残らないので、別の情報も考えます。
図にするとこのような感じになります。
※ER図っぽい独自の図です
各テーブルの仕様を考える
考えた情報の関連をもとにテーブルのカラムを考えてみると次のようになります。
背景がグレーの所は、情報がダブっているので本来なら不必要なものです。
Setテーブルのスコア(Game数)はGameテーブルのデータを拾い集めれば分かりますし、GameテーブルのPlayer情報はEntryテーブルのデータから知ることができます。
実際は検索の時に便利だったりするのでダブらせてます。
最後に
現在のCRL PocketではBANカードの表示はデータの登録などが大変なのでできていません。
また、使用デッキは持たせるならGameテーブルですが、これもやろうとすると大変ですね。
やる気と時間があれば考えます❗
参考サイト
本記事の内容と関連する、参考になるかな?と思われるサイトです。
- DB論理設計のノウハウ – Qiita
- データベーステーブル設計の基礎の基礎〜エンティティの抽出・定義から正規化まで – エンジニアHub
- 若手プログラマー必読!5分で理解できるER図の書き方5ステップ
- 第4回 データベースの正規化 – OSS-DB入門
以上です!
関連記事・関連サイト
・当ブログのクラロワ記事
・当ブログのクラロワリーグ記事
・CRL Pocket … クラロワリーグの試合予定・試合結果など
コメント