bindbox-game/migrations/20260420_minesweeper_tables.sql
2026-04-20 15:53:31 +08:00

54 lines
3.1 KiB
SQL

-- 扫雷游戏:每局每人的对战记录
CREATE TABLE IF NOT EXISTS `minesweeper_game_records` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`match_id` VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'Nakama match ID',
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`game_type` VARCHAR(32) NOT NULL DEFAULT 'minesweeper' COMMENT 'minesweeper / minesweeper_free',
`ticket` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '入场券',
`is_winner` TINYINT(1) NOT NULL DEFAULT 0,
`rank_position` TINYINT NOT NULL DEFAULT 0 COMMENT '本局名次',
`total_players` TINYINT NOT NULL DEFAULT 0,
`total_rounds` INT NOT NULL DEFAULT 0 COMMENT '游戏总轮次',
`rounds_survived` INT NOT NULL DEFAULT 0 COMMENT '存活轮次',
`score` INT NOT NULL DEFAULT 0,
`damage_dealt` INT NOT NULL DEFAULT 0,
`damage_taken` INT NOT NULL DEFAULT 0,
`kills` INT NOT NULL DEFAULT 0,
`chests_collected` INT NOT NULL DEFAULT 0,
`rank_points` INT NOT NULL DEFAULT 0 COMMENT '积分变动',
`raw_summary` JSON COMMENT '完整结算数据快照',
`settled_at` DATETIME NOT NULL,
`created_at` DATETIME NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_match_user` (`match_id`, `user_id`),
KEY `idx_user_game` (`user_id`, `game_type`),
KEY `idx_settled_at` (`settled_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='扫雷对战记录';
-- 扫雷游戏:排行榜(每人每游戏类型一行,累计聚合)
CREATE TABLE IF NOT EXISTS `minesweeper_leaderboard` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` BIGINT NOT NULL,
`game_type` VARCHAR(32) NOT NULL DEFAULT 'minesweeper',
`matches_played` INT NOT NULL DEFAULT 0,
`wins` INT NOT NULL DEFAULT 0,
`losses` INT NOT NULL DEFAULT 0,
`win_rate` DECIMAL(6,4) NOT NULL DEFAULT 0.0000,
`total_score` INT NOT NULL DEFAULT 0,
`best_score` INT NOT NULL DEFAULT 0,
`avg_score` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
`total_damage_dealt` INT NOT NULL DEFAULT 0,
`total_damage_taken` INT NOT NULL DEFAULT 0,
`avg_damage_dealt` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
`total_chests_collected` INT NOT NULL DEFAULT 0,
`total_rounds_survived` INT NOT NULL DEFAULT 0,
`total_rank_points` INT NOT NULL DEFAULT 0,
`last_match_id` VARCHAR(128) NOT NULL DEFAULT '',
`last_settled_at` DATETIME NOT NULL,
`created_at` DATETIME NOT NULL,
`updated_at` DATETIME NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_game` (`user_id`, `game_type`),
KEY `idx_rank_points` (`game_type`, `total_rank_points` DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='扫雷排行榜聚合';