RinneCircle 開発室
DB 設計
基本方針
- nvarchar(n) の n について
- uuid が-を含めると 36 文字。特に理由がなければ、きりよく
nvarchar(64)
をデフォルトとする。 - なお、text と nvarchar の使い分けに明確なメリットはない。Let’s POSTGRES - 文字列型の使い分け
- uuid が-を含めると 36 文字。特に理由がなければ、きりよく
- Timestamp について
- DB 上はUTCを扱うものとする。AWS上の node.js は UTC で基本的には動かしたほうが扱いやすいため。
データベース
環境としてHasura + Neonを使用する。 エンジンは Postgers。
ローカルでの動作確認のため、Prisma で作成する。
SQL はlocalMock/prisma/migrations
を参照。
これの SQL を Hasura に適用する。
テーブル
RinneUser ユーザ
id は firebase auth の uid を基本的に使用。28 文字。
RinneScenario シナリオ
path は S3 へのパス。「ユーザ ID+作成日+シナリオ ID+scenario.json」 ${ユーザID}/scenario/${yyyy}/${mm}/${dd}/${シナリオID}/scenario.json
imageUrl は S3 のパス。「ユーザ ID+作成日+シナリオ ID+scenarioTitle.png※」 ${ユーザID}/scenario/${yyyy}/${mm}/${dd}/${シナリオID}/scenarioTitle.png
png※はアップロードした画像の拡張子
RinneSession セッション ※未作成
RinnePlayerCharacter キャラクター ※未作成
RinneScenarioLimitTag シナリオ制限タグ ※未作成
シナリオの参加条件をタグで表現
RinneScenarioSearchTag シナリオ検索タグ ※未作成
RinnePlayerCharacterTag プレイヤーキャラクタータグ ※未作成
Tag タグ ※未作成
制限や検索のためのタグ
RinneSessionLog セッションログ ※未作成
プレイヤーの発言ログなど
ScenarioRequire シナリオ要望 ※未作成
選択肢を追加してほしいなどの要望
ER 図
erDiagram RinneUser { id varchar(64) PK "Not Null ... firebase auth uid" name varchar(64) "Not Null" createdAt timestamp "Not Null DEFAULT CURRENT_TIMESTAMP" updatedAt timestamp "Not Null" imageUrl text twitterAccount text } RinneScenario { id varchar(64) PK "Not Null ... uuid" authorId varchar(64) "Not Null ... firebase auth uid" title text "Not Null" path text "Not Null ... シナリオ置き場のパス" published boolean "Not Null Default false" updatedAt timestamp "Not Null" imageUrl text } RinneUser ||--o{ RinneScenario : has RinneSession { id varchar(64) PK "Not Null ... uuid" scenarioId varchar(64) "Not Null ... uuid|シナリオID" createdAt timestamp "Not Null DEFAULT CURRENT_TIMESTAMP" gameMasterId varchar(64) "Not Null ... firebase auth uid" gameMasterName text } RinneScenario o|--o{ RinneSession : has RinnePlayerCharacter { id varchar(64) PK "Not Null ... uuid" name text "Not Null" createdAt timestamp "Not Null DEFAULT CURRENT_TIMESTAMP" updatedAt timestamp "Not Null" detail jsonb "Not Null" } RinneUser ||--o{ RinnePlayerCharacter : has RinneSessionPCs { sessionId varchar(64) PK "Not Null ... uuid| セッションID" pcId varchar(64) PK "Not Null ... uuid| プレイヤーキャラクターID" } RinneSession ||--o{ RinneSessionPCs : join RinnePlayerCharacter ||--o{ RinneSessionPCs : join Tag { name text PK } RinneScenario o|--o{ RinneScenarioLimitTag: has Tag ||--o{ RinneScenarioLimitTag: is RinnePlayerCharacter o|--o{ RinnePlayerCharacterTag: has RinnePlayerCharacterTag }o--|| Tag: is RinneSession ||--o{ RinneSessionLog : has RinneScenario ||--o{ ScenarioRequire: has