Closed ShinnosukeSuzuki closed 3 weeks ago
各テーブルのidをvacherでUUIDで作成するようにする。 プロダクションではauto incrementを採用しないことが多い。auto increment機能のないDBに移行する可能性もあるため。
results→ users_charactersにテーブル名を変更する。
アドバンスではキャラクターテーブルをメモリに乗せるなどがある。 ガチャの排出ロジックは本筋では何ので、シンプルでいい。
キャラクター関連APIから優先して作る。 DBにサンプルを入れて動作確認。
各テーブルのidをVARCHARに変更し以下のER図のように設計した。
erDiagram
USERS ||--o{ USERS_CHARACTERS : has
CHARACTERS ||--o{ USERS_CHARACTERS : "is owned by"
USERS {
string id PK
string name
string token
}
CHARACTERS {
string id PK
string name
float probability
}
USERS_CHARACTERS {
string id PK
string user_id FK
string character_id FK
}
https://github.com/ShinnosukeSuzuki/techtrain-mission-ca-tech-dojo-golang/pull/2/commits/c44451454fb71b86e17317071432a41d3aa8b466 userのidをuuidで作成するように修正した。 正常にユーザー作成apiが動作することを確認した。
step5: ガチャに関連するテーブルの設計
APIの要件
全てのAPIの仕様についてはapi-document.yamlに記載。step5に関連するAPIを下記に記載。
ガチャ関連API
POST /gacha/draw
ガチャを引いてキャラクターを取得する処理を実装します。 獲得したキャラクターはユーザ所持キャラクターテーブルへ保存します。 同じ種類のキャラクターでもユーザは複数所持することができます。 キャラクターの確率は等倍ではなく、任意に変更できる。 RequestResponse
キャラクター関連API
GET /character/list
ユーザが所持しているキャラクター一覧情報を取得します。 ResponseER図
テーブル設計で考えたこと
usersテーブル
ユーザー情報を保存するテーブル。 tokenを元にユーザーを一意に決定することができるため、ユニーク制約をつけた。
charactersテーブル
キャラクターの不変的な内容(IDや名前など)を定義する情報テーブル。 排出確率をprobabilityとした。
resultsテーブル
ガチャの結果を保存するテーブル。 ユーザーは同じキャラクターを複数所持できることからユーザーとキャラクターはN:Nの関係なので、usersとcharactersの中間テーブルとなるようにusersのidとcharactersのidを外部キーとした。
相談したいこと