Skip to content

DB設計

基本情報

項目
データベースPostgreSQL 16
ホスティングSupabase
スキーマ名public

テーブル一覧

Noテーブル名(日本語)テーブル名(物理)説明
1ユーザーusersユーザーアカウント情報
2デッキdecksデッキ情報
3デッキカードdeck_cardsデッキ内のカード
4カードcardsMTGカードマスタ
5価格pricesカード価格情報
6価格履歴price_history価格の履歴データ
7お気に入りfavoritesユーザーのお気に入り
8価格アラートprice_alerts価格通知設定
9プレイテストセッションplaytest_sessionsデッキ回しのセッション記録
10プレイテストアクションplaytest_actionsセッション内のアクション履歴

ER図

mermaid
erDiagram
    users ||--o{ decks : "owns"
    users ||--o{ favorites : "has"
    users ||--o{ price_alerts : "sets"
    users ||--o{ playtest_sessions : "plays"
    decks ||--o{ deck_cards : "contains"
    decks ||--o{ playtest_sessions : "tested_with"
    cards ||--o{ deck_cards : "included_in"
    cards ||--o{ prices : "has"
    cards ||--o{ price_history : "has"
    cards ||--o{ favorites : "bookmarked"
    cards ||--o{ price_alerts : "watches"
    playtest_sessions ||--o{ playtest_actions : "has"

    users {
        uuid id PK
        text email UK
        text display_name
        text avatar_url
        text role
        boolean is_premium
        timestamp created_at
        timestamp updated_at
    }

    decks {
        uuid id PK
        uuid user_id FK
        text name
        text description
        text format
        boolean is_public
        integer likes_count
        integer views_count
        timestamp created_at
        timestamp updated_at
    }

    deck_cards {
        uuid id PK
        uuid deck_id FK
        uuid card_id FK
        integer quantity
        text zone
    }

    cards {
        uuid id PK
        text scryfall_id UK
        text name
        text name_ja
        text mana_cost
        integer cmc
        text type_line
        text oracle_text
        text colors
        text color_identity
        text rarity
        text set_code
        text image_uri
        jsonb legalities
        timestamp created_at
        timestamp updated_at
    }

    prices {
        uuid id PK
        uuid card_id FK
        text source
        text condition
        decimal price_jpy
        decimal price_usd
        boolean in_stock
        timestamp fetched_at
    }

    price_history {
        uuid id PK
        uuid card_id FK
        text source
        decimal price_jpy
        decimal price_usd
        date recorded_date
    }

    favorites {
        uuid id PK
        uuid user_id FK
        uuid card_id FK
        uuid deck_id FK
        timestamp created_at
    }

    price_alerts {
        uuid id PK
        uuid user_id FK
        uuid card_id FK
        decimal target_price_jpy
        decimal target_price_usd
        boolean is_active
        timestamp created_at
    }

    playtest_sessions {
        uuid id PK
        uuid user_id FK
        uuid deck_id FK
        integer total_turns
        integer final_life
        integer mulligan_count
        integer duration_seconds
        jsonb ai_feedback
        timestamp created_at
    }

    playtest_actions {
        uuid id PK
        uuid session_id FK
        integer turn_number
        text action_type
        uuid card_id FK
        text from_zone
        text to_zone
        jsonb metadata
        timestamp performed_at
    }

テーブル詳細

users(ユーザー)

カラム名NULLキー説明
iduuidNOPKユーザーID
emailtextNOUKメールアドレス
display_nametextYES-表示名
avatar_urltextYES-アバター画像URL
roletextNO-ロール(user/admin)
is_premiumbooleanNO-プレミアム会員フラグ
created_attimestampNO-作成日時
updated_attimestampNO-更新日時

decks(デッキ)

カラム名NULLキー説明
iduuidNOPKデッキID
user_iduuidNOFK所有者ユーザーID
nametextNO-デッキ名
descriptiontextYES-説明
formattextNO-フォーマット
is_publicbooleanNO-公開フラグ
likes_countintegerNO-いいね数
views_countintegerNO-閲覧数
created_attimestampNO-作成日時
updated_attimestampNO-更新日時

deck_cards(デッキカード)

カラム名NULLキー説明
iduuidNOPKレコードID
deck_iduuidNOFKデッキID
card_iduuidNOFKカードID
quantityintegerNO-枚数(1-4、土地は無制限)
zonetextNO-ゾーン(main/sideboard/commander)

cards(カード)

カラム名NULLキー説明
iduuidNOPK内部カードID
scryfall_idtextNOUKScryfall ID
nametextNO-英語カード名
name_jatextYES-日本語カード名
mana_costtextYES-マナコスト
cmcintegerNO-点数で見たマナコスト
type_linetextNO-タイプ行
oracle_texttextYES-オラクルテキスト
colorstextYES-色(W,U,B,R,G)
color_identitytextYES-色アイデンティティ
raritytextNO-レアリティ
set_codetextNO-セットコード
image_uritextYES-画像URL
legalitiesjsonbNO-フォーマット別使用可否

prices(価格)

カラム名NULLキー説明
iduuidNOPKレコードID
card_iduuidNOFKカードID
sourcetextNO-価格ソース(hareruya/tcgplayer等)
conditiontextNO-状態(NM/EX/VG/G)
price_jpydecimalYES-日本円価格
price_usddecimalYES-米ドル価格
in_stockbooleanNO-在庫有無
fetched_attimestampNO-取得日時

playtest_sessions(プレイテストセッション)

カラム名NULLキー説明
iduuidNOPKセッションID
user_iduuidNOFK実行ユーザーID
deck_iduuidNOFK対象デッキID
total_turnsintegerYES-総ターン数
final_lifeintegerYES-終了時ライフ
mulligan_countintegerNO-マリガン回数
duration_secondsintegerYES-セッション時間(秒)
ai_feedbackjsonbYES-AI分析結果JSON
created_attimestampNO-セッション開始日時

playtest_actions(プレイテストアクション)

カラム名NULLキー説明
iduuidNOPKアクションID
session_iduuidNOFKセッションID
turn_numberintegerNO-ターン番号
action_typetextNO-アクション種別(draw/play/tap/discard/exile等)
card_iduuidYESFK操作対象カードID
from_zonetextYES-移動元ゾーン
to_zonetextYES-移動先ゾーン
metadatajsonbYES-追加情報(カウンター数、マナ消費等)
performed_attimestampNO-実行日時

インデックス

テーブルインデックス名カラム種別
cardsidx_cards_namenameBTREE
cardsidx_cards_scryfall_idscryfall_idUNIQUE
deck_cardsidx_deck_cards_deck_iddeck_idBTREE
pricesidx_prices_card_idcard_idBTREE
pricesidx_prices_fetched_atfetched_atBTREE
playtest_sessionsidx_playtest_sessions_user_iduser_idBTREE
playtest_sessionsidx_playtest_sessions_deck_iddeck_idBTREE
playtest_actionsidx_playtest_actions_session_idsession_idBTREE