「ガチャ」のDB設計 – 同一確率

データベース設計 設計例

本記事はDB設計の提案を記載します。
この設計はあくまで一例です。
これを雛形として、ご自分の構築したいシステムに合わせてご利用ください。

概要

スマホのゲームなどでよく見かける「ガチャ」の仕組みです。

リストの中からランダムで抽出されるだけの仕組みです。
全てが同一確率なので、中身が減らないおみくじなどに利用できるのではないでしょうか。

もしくは確率分のGachaItemsを入れて確率を実現させる事が可能です。
例えば、当たり1%、ハズレ99%の場合、当たりを1レコード、ハズレを99レコード入れます。

設計詳細

ER図

erDiagram Gachas ||--o{ GachaItems : "has many" Gachas { int id "PK" string name } GachaItems { int id PK int gacha_id FK string item_name }

使い方

SQLで取得

一番簡単な取得方法は以下。SQLで一発で取得可能です。

SELECT * FROM GachaItems WHERE gacha_id = ? ORDER BY RAND() LIMIT 1;
SQL

ランダム部分はコードで取得

まずはGachaItemsの一覧をSQLで取得します。

SELECT * FROM GachaItems WHERE gacha_id = ?;
SQL

取得したリストからランダムで1件取得します。

shuffle($GachaItems);
return $gachaItems[0]; // array_pop()とかでも可
PHP

コメント

タイトルとURLをコピーしました