DB スキーマ
hocg-analyze が使用するデータベーススキーマのリファレンス
hocg-analyze は Cloudflare D1(SQLite)上に 5 つのテーブルを持ちます。データは ブシナビ API と decklog API から日次同期されます。
ER 図
Event 1──* TournamentResult *──? Deck 1──* DeckCard *──1 Card
Event→TournamentResult: 1 つの大会に複数の入賞結果TournamentResult→Deck: 入賞者がデッキレシピを公開している場合のみ紐付くDeck→DeckCard: 1 つのデッキに複数のカードエントリ(レアリティ別)DeckCard→Card: カードマスタへの参照
Event(大会)
ブシナビ API から取得した大会情報。
| カラム | 型 | 説明 |
|---|---|---|
id |
Int (PK) | 内部 ID |
source_event_id |
Int (UNIQUE) | ブシナビ側の大会 ID |
event_series |
String | 大会シリーズ名(例: エントリーカップ) |
event_title |
String? | 大会タイトル |
organizer_name |
String | 主催店舗名 |
place |
String? | 開催場所 |
pref_code |
Int? | 都道府県コード |
series_type |
Int? | シリーズ種別 |
organizer_id |
Int? | 主催者 ID |
publish_rank_lower_limit |
Int? | 公開順位の下限 |
publish_rank_upper_limit |
Int? | 公開順位の上限 |
date |
String | 開催日 |
participants |
Int | 参加者数 |
TournamentResult(入賞結果)
大会ごとの入賞者情報。1 大会・1 順位・1 ユーザ名でユニーク。
| カラム | 型 | 説明 |
|---|---|---|
id |
Int (PK) | 内部 ID |
event_id |
Int (FK → Event) | 大会 ID |
rank |
Int | 順位 |
username |
String | プレイヤー名 |
oshi_holomen |
String | 推しホロメン名 |
deck_image_url |
String? | デッキ画像 URL |
reward_image_url |
String? | 報酬画像 URL |
friend_code |
String? | フレンドコード |
team_id |
Int? | チーム ID |
deck_id |
Int? (FK → Deck) | デッキ ID(レシピ公開時のみ) |
ユニーク制約: (event_id, rank, username)
Deck(デッキ)
decklog に登録されたデッキレシピのメタデータ。
| カラム | 型 | 説明 |
|---|---|---|
id |
Int (PK) | 内部 ID |
deck_recipe_id |
String (UNIQUE) | decklog 上のレシピ ID(例: 4Z7PT) |
title |
String? | デッキタイトル |
fav_count |
Int? | decklog 上のお気に入り数 |
has_recipe_error |
Int? | decklog 側のレシピ不整合フラグ |
decklog_url |
String? | decklog URL |
DeckCard(デッキ内カード)
デッキに含まれるカードのエントリ。同一カード番号でもレアリティが異なれば別行として保持されます。
| カラム | 型 | 説明 |
|---|---|---|
id |
Int (PK) | 内部 ID |
deck_id |
Int (FK → Deck) | デッキ ID |
card_id |
String (FK → Card) | カード番号 |
rarity |
String | 印刷ごとのレアリティ(例: C, SR, UR) |
card_count |
Int | 採用枚数 |
ユニーク制約: (deck_id, card_id, rarity)
:::note
rarity は印刷ごとのレアリティです。同一カードを複数レアリティで採用しているデッキ(例: フロンティアスピリット U×2 + P×2)では、カード番号が同じでも別行として記録されます。Card.rarity は代表レアリティを示す別の値です。
:::
Card(カードマスタ)
decklog API から取得したカード情報。カード番号が主キー。
| カラム | 型 | 説明 |
|---|---|---|
card_number |
String (PK) | カード番号(例: hBP07-100) |
card_name |
String | カード名 |
card_kind |
String | カード種別(ホロメン / サポート・アイテム 等) |
card_type |
Int? | decklog 内部タイプ(1=メイン, 2=エール, 3=推しホロメン) |
is_limited |
Boolean? | LIMITED カードフラグ |
card_image_url |
String? | カード画像 URL |
rarity |
String? | 代表レアリティ(最初に観測された値を保持) |
bloom_level |
String? | Bloom レベル(Debut / 1st 等) |
データソースと同期
| テーブル | データソース | 同期タイミング |
|---|---|---|
| Event, TournamentResult | ブシナビ API | 毎日 JST 12:00(Sync Data ワークフロー) |
| Deck, DeckCard, Card | decklog API | 毎日 JST 13:00(Sync Data ワークフロー) |
| DeckCard(全件再構築) | decklog API | 手動(Backfill Deck Cards ワークフロー) |