TFT Predict - Data Dictionary
最後更新: 2025-01-30
版本: V2
目錄
1. 原始數據表
1.1 tft_matches
比賽原始數據表,儲存從 Riot API 獲取的完整比賽資訊。
| 欄位 | 類型 | 說明 | 範例 |
|---|---|---|---|
match_id | VARCHAR | 比賽唯一識別碼,格式: {REGION}_{ID} | OC1_123456789 |
info | JSONB | 完整比賽資訊 JSON | 見下方結構 |
created_at | TIMESTAMP | 記錄創建時間 | 2025-01-30 10:00:00 |
info JSON 結構:
{ "game_datetime": 1706600000000, // Unix timestamp (毫秒) "game_length": 1847.5, // 遊戲時長(秒) "game_version": "Version 14.24.123.456", "queue_id": "1100", // 1100 = 排位賽 "participants": [ { "puuid": "xxx", "placement": 1, "level": 9, "gold_left": 4, "total_damage_to_players": 120, "units": [...], "traits": [...] } // ... 8 個玩家 ]}資料保留策略: 7 天
2. 配置表
2.1 tft_data_config
系統配置表,用於追踪數據處理狀態。
| 欄位 | 類型 | 說明 | 範例 |
|---|---|---|---|
config_key | VARCHAR(50) | 配置鍵(主鍵) | last_daily_snapshot |
config_value | TEXT | 配置值 | 2025-01-29 |
updated_at | TIMESTAMP | 最後更新時間 | 2025-01-30 04:00:00 |
預設配置項:
| Key | 說明 |
|---|---|
last_daily_snapshot | 最後一次每日快照的日期 |
data_retention_days | 原始數據保留天數(預設 7) |
3. 每日持久化表(時間序列)
3.1 daily_champion_stats
每日英雄統計,按 (日期, 區域, 版本, 英雄, 星級) 聚合。
| 欄位 | 類型 | 說明 | 範例 |
|---|---|---|---|
id | SERIAL | 自增主鍵 | 1 |
stat_date | DATE | 統計日期 | 2025-01-29 |
region | VARCHAR(10) | 伺服器區域 | OC1, NA1, EUW1 |
patch | VARCHAR(10) | 遊戲版本 | 14.24 |
character_id | VARCHAR(50) | 英雄 ID | TFT12_Ahri |
tier | SMALLINT | 星級 (1/2/3) | 3 |
games_played | INT | 被選用次數(玩家數) | 150 |
total_matches | INT | 當日總比賽數 | 1000 |
unique_matches | INT | 出現的獨立比賽數 | 120 |
avg_placement | NUMERIC(4,2) | 平均排名 | 3.85 |
stddev_placement | NUMERIC(4,2) | 排名標準差 | 2.10 |
top4_count | INT | 進入前4的次數 | 70 |
win_count | INT | 第1名的次數 | 15 |
pick_rate | NUMERIC(6,4) | 每場平均選用數 | 0.1500 |
appearance_rate | NUMERIC(6,4) | 出現比例 | 0.1200 |
avg_per_match | NUMERIC(4,2) | 出現時平均幾人用 | 1.25 |
created_at | TIMESTAMP | 記錄創建時間 | 2025-01-30 04:00:00 |
唯一約束: (stat_date, region, patch, character_id, tier)
3.2 daily_item_stats
每日裝備統計。
| 欄位 | 類型 | 說明 | 範例 |
|---|---|---|---|
id | SERIAL | 自增主鍵 | 1 |
stat_date | DATE | 統計日期 | 2025-01-29 |
region | VARCHAR(10) | 伺服器區域 | OC1 |
patch | VARCHAR(10) | 遊戲版本 | 14.24 |
item_name | VARCHAR(100) | 裝備名稱 | TFT_Item_JeweledGauntlet |
usage_count | INT | 使用次數 | 500 |
unique_matches | INT | 出現的獨立比賽數 | 400 |
avg_placement | NUMERIC(4,2) | 平均排名 | 4.20 |
stddev_placement | NUMERIC(4,2) | 排名標準差 | 2.30 |
top4_count | INT | 進入前4的次數 | 250 |
created_at | TIMESTAMP | 記錄創建時間 | 2025-01-30 04:00:00 |
唯一約束: (stat_date, region, patch, item_name)
3.3 daily_trait_stats
每日羈絆統計。
| 欄位 | 類型 | 說明 | 範例 |
|---|---|---|---|
id | SERIAL | 自增主鍵 | 1 |
stat_date | DATE | 統計日期 | 2025-01-29 |
region | VARCHAR(10) | 伺服器區域 | OC1 |
patch | VARCHAR(10) | 遊戲版本 | 14.24 |
trait_name | VARCHAR(100) | 羈絆名稱 | Set12_Mage |
tier_current | SMALLINT | 羈絆激活等級 | 2 |
games_played | INT | 使用次數 | 300 |
unique_matches | INT | 出現的獨立比賽數 | 280 |
avg_placement | NUMERIC(4,2) | 平均排名 | 3.90 |
stddev_placement | NUMERIC(4,2) | 排名標準差 | 2.15 |
top4_count | INT | 進入前4的次數 | 170 |
win_count | INT | 第1名的次數 | 40 |
created_at | TIMESTAMP | 記錄創建時間 | 2025-01-30 04:00:00 |
唯一約束: (stat_date, region, patch, trait_name, tier_current)
3.4 daily_composition_stats
每日陣容統計。
| 欄位 | 類型 | 說明 | 範例 |
|---|---|---|---|
id | SERIAL | 自增主鍵 | 1 |
stat_date | DATE | 統計日期 | 2025-01-29 |
region | VARCHAR(10) | 伺服器區域 | OC1 |
patch | VARCHAR(10) | 遊戲版本 | 14.24 |
comp_hash | VARCHAR(32) | 陣容 MD5 雜湊 | a1b2c3d4e5f6... |
champions | JSONB | 英雄列表(已排序) | ["TFT12_Ahri", "TFT12_Syndra", ...] |
games_played | INT | 使用次數 | 50 |
avg_placement | NUMERIC(4,2) | 平均排名 | 3.50 |
stddev_placement | NUMERIC(4,2) | 排名標準差 | 2.00 |
top4_count | INT | 進入前4的次數 | 30 |
win_count | INT | 第1名的次數 | 8 |
created_at | TIMESTAMP | 記錄創建時間 | 2025-01-30 04:00:00 |
唯一約束: (stat_date, region, patch, comp_hash)
3.5 daily_match_summary
每日比賽總覽,用於計算比率。
| 欄位 | 類型 | 說明 | 範例 |
|---|---|---|---|
id | SERIAL | 自增主鍵 | 1 |
stat_date | DATE | 統計日期 | 2025-01-29 |
region | VARCHAR(10) | 伺服器區域 | OC1 |
patch | VARCHAR(10) | 遊戲版本 | 14.24 |
total_matches | INT | 總比賽數 | 1000 |
total_participants | INT | 總參與者數 (= matches × 8) | 8000 |
created_at | TIMESTAMP | 記錄創建時間 | 2025-01-30 04:00:00 |
唯一約束: (stat_date, region, patch)
4. 基礎物化視圖
4.1 mv_participants
展開後的玩家參與記錄(7 天滑動窗口)。
| 欄位 | 類型 | 說明 | 範例 |
|---|---|---|---|
match_id | VARCHAR | 比賽 ID | OC1_123456789 |
region | VARCHAR | 從 match_id 提取的區域 | OC1 |
puuid | VARCHAR | 玩家唯一識別碼 | abc123... |
placement | INT | 最終排名 (1-8) | 2 |
game_datetime | TIMESTAMP | 比賽時間 | 2025-01-29 15:30:00 |
game_date | DATE | 比賽日期 | 2025-01-29 |
game_length | FLOAT | 遊戲時長(秒) | 1847.5 |
patch | VARCHAR | 遊戲版本 | 14.24 |
units_json | JSONB | 英雄列表 JSON | [{"character_id": "TFT12_Ahri", ...}] |
traits_json | JSONB | 羈絆列表 JSON | [{"name": "Set12_Mage", ...}] |
level | INT | 玩家等級 | 9 |
gold_left | INT | 剩餘金幣 | 4 |
total_damage | INT | 造成的總傷害 | 120 |
唯一索引: (match_id, puuid)
4.2 mv_units
展開後的英雄記錄,每個玩家每個英雄一筆。
| 欄位 | 類型 | 說明 | 範例 |
|---|---|---|---|
match_id | VARCHAR | 比賽 ID | OC1_123456789 |
region | VARCHAR | 區域 | OC1 |
puuid | VARCHAR | 玩家 ID | abc123... |
placement | INT | 玩家排名 | 2 |
game_datetime | TIMESTAMP | 比賽時間 | 2025-01-29 15:30:00 |
game_date | DATE | 比賽日期 | 2025-01-29 |
patch | VARCHAR | 遊戲版本 | 14.24 |
character_id | VARCHAR | 英雄 ID | TFT12_Ahri |
tier | INT | 星級 (1/2/3) | 3 |
rarity | INT | 稀有度 (0-4) | 3 |
items | JSONB | 裝備列表 | ["TFT_Item_JeweledGauntlet", ...] |
unit_position | BIGINT | 英雄在陣容中的順序 | 1 |
唯一索引: (match_id, puuid, unit_position)
4.3 mv_items
展開後的裝備記錄,每個裝備一筆。
| 欄位 | 類型 | 說明 | 範例 |
|---|---|---|---|
match_id | VARCHAR | 比賽 ID | OC1_123456789 |
region | VARCHAR | 區域 | OC1 |
puuid | VARCHAR | 玩家 ID | abc123... |
character_id | VARCHAR | 持有裝備的英雄 | TFT12_Ahri |
tier | INT | 英雄星級 | 3 |
placement | INT | 玩家排名 | 2 |
game_datetime | TIMESTAMP | 比賽時間 | 2025-01-29 15:30:00 |
game_date | DATE | 比賽日期 | 2025-01-29 |
patch | VARCHAR | 遊戲版本 | 14.24 |
unit_position | BIGINT | 英雄位置 | 1 |
item_name | TEXT | 裝備名稱 | TFT_Item_JeweledGauntlet |
item_position | BIGINT | 裝備在英雄上的順序 | 1 |
唯一索引: (match_id, puuid, unit_position, item_position)
4.4 mv_traits
展開後的羈絆記錄,只包含已激活的羈絆。
| 欄位 | 類型 | 說明 | 範例 |
|---|---|---|---|
match_id | VARCHAR | 比賽 ID | OC1_123456789 |
region | VARCHAR | 區域 | OC1 |
puuid | VARCHAR | 玩家 ID | abc123... |
placement | INT | 玩家排名 | 2 |
game_datetime | TIMESTAMP | 比賽時間 | 2025-01-29 15:30:00 |
game_date | DATE | 比賽日期 | 2025-01-29 |
patch | VARCHAR | 遊戲版本 | 14.24 |
trait_name | TEXT | 羈絆名稱 | Set12_Mage |
num_units | INT | 羈絆英雄數量 | 5 |
tier_current | INT | 羈絆激活等級 | 2 |
trait_position | BIGINT | 羈絆順序 | 1 |
唯一索引: (match_id, puuid, trait_position)
5. 統計物化視圖
5.1 mv_champion_global_stats
英雄全局統計(不分星級)。
| 欄位 | 類型 | 說明 | 範例 |
|---|---|---|---|
region | VARCHAR | 區域 | OC1 |
patch | VARCHAR | 遊戲版本 | 14.24 |
character_id | VARCHAR | 英雄 ID | TFT12_Ahri |
games_in | BIGINT | 出現的獨立比賽數 | 120 |
games_played | NUMERIC | 總選用次數(玩家數) | 150 |
total_matches | BIGINT | 期間總比賽數 | 1000 |
avg_placement | NUMERIC(4,2) | 平均排名 | 3.85 |
stddev_placement | NUMERIC(4,2) | 排名標準差 | 2.10 |
top4_rate | NUMERIC(5,3) | Top4 率 | 0.583 |
win_rate | NUMERIC(5,3) | 勝率(第1名) | 0.125 |
pick_rate | NUMERIC(5,3) | 每場平均選用數 | 0.150 |
appearance_rate | NUMERIC(6,4) | 出現比例 | 0.1200 |
唯一索引: (region, patch, character_id)
5.2 mv_champion_detail_stats
英雄詳細統計(按星級分組)。
| 欄位 | 類型 | 說明 | 範例 |
|---|---|---|---|
region | VARCHAR | 區域 | OC1 |
patch | VARCHAR | 遊戲版本 | 14.24 |
character_id | VARCHAR | 英雄 ID | TFT12_Ahri |
tier | INT | 星級 | 3 |
games_in | BIGINT | 出現的獨立比賽數 | 50 |
games_played | NUMERIC | 總選用次數 | 55 |
total_matches | BIGINT | 期間總比賽數 | 1000 |
avg_placement | NUMERIC(4,2) | 平均排名 | 2.80 |
stddev_placement | NUMERIC(4,2) | 排名標準差 | 1.80 |
top4_rate | NUMERIC(5,3) | Top4 率 | 0.720 |
win_rate | NUMERIC(5,3) | 勝率 | 0.180 |
pick_rate | NUMERIC(5,3) | 每場平均選用數 | 0.055 |
appearance_rate | NUMERIC(6,4) | 出現比例 | 0.0500 |
唯一索引: (region, patch, character_id, tier)
5.3 mv_item_stats
裝備統計。
| 欄位 | 類型 | 說明 | 範例 |
|---|---|---|---|
region | VARCHAR | 區域 | OC1 |
patch | VARCHAR | 遊戲版本 | 14.24 |
item_name | TEXT | 裝備名稱 | TFT_Item_JeweledGauntlet |
games_played | BIGINT | 使用次數 | 500 |
games_in | BIGINT | 出現的獨立比賽數 | 400 |
total_matches | BIGINT | 期間總比賽數 | 1000 |
avg_placement | NUMERIC(4,2) | 平均排名 | 4.20 |
stddev_placement | NUMERIC(4,2) | 排名標準差 | 2.30 |
top4_rate | NUMERIC(5,3) | Top4 率 | 0.500 |
pick_rate | NUMERIC(5,3) | 每場平均使用數 | 0.500 |
best_champions | JSONB | 最佳使用英雄 Top 3 | 見下方 |
best_champions 結構:
[ {"champion": "TFT12_Ahri", "avg_placement": 2.80, "usage": 150}, {"champion": "TFT12_Syndra", "avg_placement": 3.20, "usage": 120}, {"champion": "TFT12_Vex", "avg_placement": 3.50, "usage": 100}]唯一索引: (region, patch, item_name)
5.4 mv_trait_stats
羈絆統計。
| 欄位 | 類型 | 說明 | 範例 |
|---|---|---|---|
region | VARCHAR | 區域 | OC1 |
patch | VARCHAR | 遊戲版本 | 14.24 |
trait_name | TEXT | 羈絆名稱 | Set12_Mage |
tier_current | INT | 羈絆激活等級 | 2 |
games_played | BIGINT | 使用次數 | 300 |
games_in | BIGINT | 出現的獨立比賽數 | 280 |
total_matches | BIGINT | 期間總比賽數 | 1000 |
avg_placement | NUMERIC(4,2) | 平均排名 | 3.90 |
stddev_placement | NUMERIC(4,2) | 排名標準差 | 2.15 |
top4_rate | NUMERIC(5,3) | Top4 率 | 0.567 |
win_rate | NUMERIC(5,3) | 勝率 | 0.133 |
pick_rate | NUMERIC(5,3) | 每場平均使用數 | 0.300 |
唯一索引: (region, patch, trait_name, tier_current)
5.5 mv_composition_stats
陣容統計。
| 欄位 | 類型 | 說明 | 範例 |
|---|---|---|---|
comp_hash | VARCHAR(32) | 陣容 MD5 雜湊 | a1b2c3d4... |
region | VARCHAR | 區域 | OC1 |
patch | VARCHAR | 遊戲版本 | 14.24 |
champions | JSONB | 英雄列表(已排序) | ["TFT12_Ahri", ...] |
core_units | JSONB | 典型 3 星英雄 | ["TFT12_Ahri"] |
main_traits | JSONB | 主要羈絆 | 見下方 |
games_played | BIGINT | 使用次數 | 50 |
avg_placement | NUMERIC(4,2) | 平均排名 | 3.50 |
stddev_placement | NUMERIC(4,2) | 排名標準差 | 2.00 |
top4_count | BIGINT | Top4 次數 | 30 |
win_count | BIGINT | 第1名次數 | 8 |
top4_rate | NUMERIC(5,3) | Top4 率 | 0.600 |
win_rate | NUMERIC(5,3) | 勝率 | 0.160 |
main_traits 結構:
[ {"name": "Set12_Mage", "tier": 3}, {"name": "Set12_Arcana", "tier": 2}, {"name": "Set12_Scholar", "tier": 1}]唯一索引: (comp_hash)
5.6 mv_item_champion_effects
裝備對英雄的效果分析。
| 欄位 | 類型 | 說明 | 範例 |
|---|---|---|---|
region | VARCHAR | 區域 | OC1 |
patch | VARCHAR | 遊戲版本 | 14.24 |
character_id | VARCHAR | 英雄 ID | TFT12_Ahri |
tier | INT | 星級 | 3 |
item_name | TEXT | 裝備名稱 | TFT_Item_JeweledGauntlet |
effect_size | NUMERIC(5,3) | 效果大小(無裝 - 有裝) | 0.850 |
sample_size | BIGINT | 樣本數 | 200 |
with_item_avg | NUMERIC(4,2) | 有裝備時平均排名 | 2.80 |
with_item_stddev | NUMERIC(4,2) | 有裝備時排名標準差 | 1.50 |
without_item_avg | NUMERIC(4,2) | 無裝備時平均排名 | 3.65 |
without_item_stddev | NUMERIC(4,2) | 無裝備時排名標準差 | 2.10 |
計算公式:
effect_size = without_item_avg - with_item_avg正值表示裝備有正面效果。
唯一索引: (region, patch, character_id, tier, item_name)
6. API 視圖
6.1 api_champion_global_rankings
英雄全局排名 API。
與 mv_champion_global_stats 相同結構,按 avg_placement 排序。
6.2 api_champion_detail_rankings
英雄詳細排名 API(按星級)。
與 mv_champion_detail_stats 相同結構,按 character_id, tier DESC 排序。
6.3 api_item_rankings
裝備排名 API。
與 mv_item_stats 相同結構,按 avg_placement 排序。
6.4 api_trait_rankings
羈絆排名 API。
與 mv_trait_stats 相同結構,按 avg_placement 排序。
6.5 api_composition_rankings
陣容排名 API。
| 欄位 | 類型 | 說明 |
|---|---|---|
id | VARCHAR(32) | 陣容 ID (= comp_hash) |
region | VARCHAR | 區域 |
patch | VARCHAR | 版本 |
champions | JSONB | 英雄列表 |
core_units | JSONB | 核心英雄 |
main_traits | JSONB | 主要羈絆 |
games_played | BIGINT | 使用次數 |
avg_placement | NUMERIC | 平均排名 |
stddev_placement | NUMERIC | 排名標準差 |
top4_rate | NUMERIC | Top4 率 |
win_rate | NUMERIC | 勝率 |
6.6 api_champion_history
英雄歷史數據 API(從每日表讀取)。
與 daily_champion_stats 類似,額外計算 top4_rate 和 win_rate。
6.7 api_champion_trend
英雄趨勢 API(按天聚合)。
| 欄位 | 類型 | 說明 |
|---|---|---|
stat_date | DATE | 日期 |
region | VARCHAR | 區域 |
patch | VARCHAR | 版本 |
character_id | VARCHAR | 英雄 ID |
total_picks | BIGINT | 總選用數 |
total_games_in | BIGINT | 總出現場次 |
total_matches | INT | 總比賽數 |
weighted_avg_placement | NUMERIC | 加權平均排名 |
top4_rate | NUMERIC | Top4 率 |
win_rate | NUMERIC | 勝率 |
6.8 api_item_trend
裝備趨勢 API(按天聚合)。
| 欄位 | 類型 | 說明 |
|---|---|---|
stat_date | DATE | 日期 |
region | VARCHAR | 區域 |
patch | VARCHAR | 版本 |
item_name | VARCHAR | 裝備名稱 |
total_usage | BIGINT | 總使用數 |
total_games_in | BIGINT | 總出現場次 |
weighted_avg_placement | NUMERIC | 加權平均排名 |
top4_rate | NUMERIC | Top4 率 |
7. 函數
7.1 generate_daily_snapshot(target_date DATE)
生成指定日期的每日快照。
| 參數 | 類型 | 預設值 | 說明 |
|---|---|---|---|
target_date | DATE | 昨天 | 要生成快照的日期 |
返回: TEXT - 執行結果摘要
範例:
SELECT generate_daily_snapshot('2025-01-29');-- 返回: 'Daily snapshot for 2025-01-29 completed: summary=2, champions=150, items=80, traits=45, comps=30'7.2 cleanup_old_matches(retention_days INT)
清理超過保留期限的原始比賽數據。
| 參數 | 類型 | 預設值 | 說明 |
|---|---|---|---|
retention_days | INT | 7 | 保留天數 |
返回: TEXT - 刪除數量
範例:
SELECT cleanup_old_matches(7);-- 返回: 'Deleted 500 matches older than 7 days'7.3 refresh_all_stats()
完整刷新流程:生成快照 → 清理舊數據 → 刷新視圖。
返回: TEXT - 執行結果摘要
範例:
SELECT refresh_all_stats();7.4 backfill_daily_snapshots(days_back INT)
回填歷史每日快照。
| 參數 | 類型 | 預設值 | 說明 |
|---|---|---|---|
days_back | INT | 7 | 回填天數 |
返回: TEXT - 執行結果摘要
範例:
SELECT backfill_daily_snapshots(14);7.5 get_top_compositions(...)
查詢熱門陣容。
| 參數 | 類型 | 預設值 | 說明 |
|---|---|---|---|
p_region | VARCHAR | NULL | 篩選區域(NULL = 全部) |
p_patch | VARCHAR | NULL | 篩選版本(NULL = 全部) |
p_days | INT | 7 | 查詢天數 |
p_limit | INT | 20 | 返回數量 |
返回: 表格
| 欄位 | 類型 |
|---|---|
region | VARCHAR |
patch | VARCHAR |
champions | JSONB |
total_games | BIGINT |
avg_placement | NUMERIC |
top4_rate | NUMERIC |
win_rate | NUMERIC |
範例:
SELECT * FROM get_top_compositions('OC1', '14.24', 7, 10);8. 索引清單
每日持久化表索引
| 表 | 索引名稱 | 欄位 |
|---|---|---|
daily_champion_stats | idx_daily_champion_date | stat_date |
daily_champion_stats | idx_daily_champion_region_patch | region, patch |
daily_champion_stats | idx_daily_champion_character | character_id |
daily_item_stats | idx_daily_item_date | stat_date |
daily_item_stats | idx_daily_item_region_patch | region, patch |
daily_trait_stats | idx_daily_trait_date | stat_date |
daily_trait_stats | idx_daily_trait_region_patch | region, patch |
daily_composition_stats | idx_daily_comp_date | stat_date |
daily_composition_stats | idx_daily_comp_region_patch | region, patch |
daily_match_summary | idx_daily_summary_date | stat_date |
物化視圖索引
| 視圖 | 索引名稱 | 欄位 | 類型 |
|---|---|---|---|
mv_participants | idx_mv_participants_unique | match_id, puuid | UNIQUE |
mv_participants | idx_mv_participants_datetime | game_datetime | |
mv_participants | idx_mv_participants_date | game_date | |
mv_participants | idx_mv_participants_region | region | |
mv_participants | idx_mv_participants_patch | patch | |
mv_units | idx_mv_units_unique | match_id, puuid, unit_position | UNIQUE |
mv_units | idx_mv_units_character | character_id | |
mv_units | idx_mv_units_tier | tier | |
mv_units | idx_mv_units_region_patch | region, patch | |
mv_items | idx_mv_items_unique | match_id, puuid, unit_position, item_position | UNIQUE |
mv_items | idx_mv_items_name | item_name | |
mv_items | idx_mv_items_character | character_id | |
mv_items | idx_mv_items_region_patch | region, patch | |
mv_traits | idx_mv_traits_unique | match_id, puuid, trait_position | UNIQUE |
mv_traits | idx_mv_traits_name | trait_name | |
mv_traits | idx_mv_traits_region_patch | region, patch | |
mv_champion_global_stats | idx_champion_global_unique | region, patch, character_id | UNIQUE |
mv_champion_detail_stats | idx_champion_detail_unique | region, patch, character_id, tier | UNIQUE |
mv_item_stats | idx_item_stats_unique | region, patch, item_name | UNIQUE |
mv_trait_stats | idx_trait_stats_unique | region, patch, trait_name, tier_current | UNIQUE |
mv_composition_stats | idx_comp_stats_unique | comp_hash | UNIQUE |
mv_item_champion_effects | idx_item_effects_unique | region, patch, character_id, tier, item_name | UNIQUE |
9. 數據關係圖
┌─────────────────────────────────────────────────────────────────────────────┐│ tft_matches ││ (原始 JSON 數據) │└──────────────────────────────────┬──────────────────────────────────────────┘ │ │ JSON 展開 ▼┌─────────────────────────────────────────────────────────────────────────────┐│ mv_participants ││ (每個玩家每場比賽一筆記錄) │└──────────┬──────────────────────┬──────────────────────┬────────────────────┘ │ │ │ │ units_json │ traits_json │ units_json │ 展開 │ 展開 │ 聚合排序 ▼ ▼ ▼┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐│ mv_units │ │ mv_traits │ │ compositions ││ (每個英雄一筆) │ │ (每個羈絆一筆) │ │ (CTE) │└────────┬─────────┘ └────────┬─────────┘ └────────┬─────────┘ │ │ │ │ items 展開 │ │ ▼ │ │┌──────────────────┐ │ ││ mv_items │ │ ││ (每個裝備一筆) │ │ │└────────┬─────────┘ │ │ │ │ │ │ 聚合統計 │ 聚合統計 │ 聚合統計 ▼ ▼ ▼┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐│ mv_item_stats │ │ mv_trait_stats │ │mv_composition_ ││ │ │ │ │ stats │└──────────────────┘ └──────────────────┘ └──────────────────┘
│ │ 比較有/無裝備 ▼┌──────────────────┐│mv_item_champion_ ││ effects │└──────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐│ 每日快照流程 │├─────────────────────────────────────────────────────────────────────────────┤│ ││ mv_participants ─────┬──────> daily_match_summary ││ │ │ ││ │ ├──────> daily_champion_stats ││ ▼ │ ││ mv_units ──────────┤ ││ │ │ ││ ▼ ├──────> daily_item_stats ││ mv_items ──────────┤ ││ │ ││ mv_traits ─────────┼──────> daily_trait_stats ││ │ ││ compositions ──────┴──────> daily_composition_stats ││ │└─────────────────────────────────────────────────────────────────────────────┘附錄:常用查詢範例
A. 查看特定區域/版本的英雄排名
SELECT * FROM api_champion_global_rankingsWHERE region = 'OC1' AND patch = '14.24'ORDER BY avg_placementLIMIT 20;B. 查看英雄各星級表現
SELECT * FROM api_champion_detail_rankingsWHERE character_id = 'TFT12_Ahri';C. 驗證場次一致性
WITH global AS ( SELECT character_id, games_played as global_total FROM mv_champion_global_stats WHERE region = 'OC1' AND patch = '14.24'),detail AS ( SELECT character_id, SUM(games_played) as detail_total FROM mv_champion_detail_stats WHERE region = 'OC1' AND patch = '14.24' GROUP BY character_id)SELECT g.character_id, g.global_total, d.detail_totalFROM global gJOIN detail d ON g.character_id = d.character_idWHERE g.global_total != d.detail_total;-- 應該返回空結果D. 查看英雄歷史趨勢
SELECT * FROM api_champion_trendWHERE character_id = 'TFT12_Ahri' AND region = 'OC1'ORDER BY stat_date DESCLIMIT 14;E. 查看裝備最佳使用者
SELECT item_name, best_championsFROM api_item_rankingsWHERE region = 'OC1' AND patch = '14.24'LIMIT 10;F. 查看熱門陣容
SELECT * FROM get_top_compositions('OC1', '14.24', 7, 10);