游铛铛-数据库设计_20251110113958.sql 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. -- ============================================
  2. -- 游铛铛产品数据库设计
  3. -- 数据库:buff
  4. -- 服务器:47.99.164.66:3306
  5. -- ============================================
  6. -- 创建数据库
  7. CREATE DATABASE IF NOT EXISTS `buff` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  8. USE `buff`;
  9. -- ============================================
  10. -- 1. 软件表(software)
  11. -- 功能:管理软件特征码和收费配置
  12. -- ============================================
  13. CREATE TABLE IF NOT EXISTS `software` (
  14. `id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
  15. `code` VARCHAR(50) UNIQUE NOT NULL COMMENT '软件特征码,如:buff-xp-steam-sh',
  16. `name` VARCHAR(100) NOT NULL COMMENT '软件名称',
  17. `description` TEXT COMMENT '软件描述',
  18. `daily_price` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '每天收费基数(元)',
  19. `is_active` TINYINT(1) DEFAULT 1 COMMENT '是否启用:1-启用,0-禁用',
  20. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  21. `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  22. INDEX `idx_code` (`code`),
  23. INDEX `idx_is_active` (`is_active`)
  24. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='软件信息表';
  25. -- ============================================
  26. -- 2. 用户表(users)
  27. -- 功能:存储注册用户信息
  28. -- ============================================
  29. CREATE TABLE IF NOT EXISTS `users` (
  30. `id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
  31. `username` VARCHAR(50) UNIQUE NOT NULL COMMENT '用户名(唯一)',
  32. `password` VARCHAR(255) NOT NULL COMMENT '密码(加密存储)',
  33. `email` VARCHAR(100) COMMENT '邮箱',
  34. `machine_code` VARCHAR(64) COMMENT '绑定的机器码(MD5)',
  35. `card_id` INT COMMENT '当前激活的卡密ID',
  36. `expire_time` DATETIME COMMENT '到期时间',
  37. `last_login_time` DATETIME COMMENT '最后登录时间',
  38. `last_login_ip` VARCHAR(50) COMMENT '最后登录IP',
  39. `status` TINYINT(1) DEFAULT 1 COMMENT '状态:1-正常,0-禁用',
  40. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间',
  41. `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  42. INDEX `idx_username` (`username`),
  43. INDEX `idx_machine_code` (`machine_code`),
  44. INDEX `idx_card_id` (`card_id`),
  45. INDEX `idx_expire_time` (`expire_time`),
  46. INDEX `idx_status` (`status`)
  47. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
  48. -- ============================================
  49. -- 3. 卡密表(cards)
  50. -- 功能:存储卡密信息和激活状态
  51. -- ============================================
  52. CREATE TABLE IF NOT EXISTS `cards` (
  53. `id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
  54. `card_code` VARCHAR(32) UNIQUE NOT NULL COMMENT '卡密代码(唯一)',
  55. `software_code` VARCHAR(50) NOT NULL COMMENT '软件特征码',
  56. `days` INT NOT NULL COMMENT '天数',
  57. `discount` DECIMAL(5,2) DEFAULT 1.00 COMMENT '折扣(0.01-1.00)',
  58. `user_id` INT COMMENT '激活用户ID(NULL表示未激活)',
  59. `activated_at` DATETIME COMMENT '激活时间',
  60. `expire_time` DATETIME COMMENT '到期时间(激活时间+天数)',
  61. `status` TINYINT(1) DEFAULT 0 COMMENT '状态:0-未激活,1-已激活,2-已过期',
  62. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  63. `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  64. INDEX `idx_card_code` (`card_code`),
  65. INDEX `idx_software_code` (`software_code`),
  66. INDEX `idx_user_id` (`user_id`),
  67. INDEX `idx_status` (`status`),
  68. INDEX `idx_expire_time` (`expire_time`)
  69. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='卡密表';
  70. -- ============================================
  71. -- 4. 充值记录表(recharge_records)
  72. -- 功能:记录用户充值历史
  73. -- ============================================
  74. CREATE TABLE IF NOT EXISTS `recharge_records` (
  75. `id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
  76. `user_id` INT NOT NULL COMMENT '用户ID',
  77. `card_id` INT COMMENT '使用的卡密ID',
  78. `software_code` VARCHAR(50) NOT NULL COMMENT '软件特征码',
  79. `days` INT NOT NULL COMMENT '充值天数',
  80. `amount` DECIMAL(10,2) COMMENT '充值金额(可选,用于统计)',
  81. `expire_time_before` DATETIME COMMENT '充值前到期时间',
  82. `expire_time_after` DATETIME COMMENT '充值后到期时间',
  83. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '充值时间',
  84. INDEX `idx_user_id` (`user_id`),
  85. INDEX `idx_card_id` (`card_id`),
  86. INDEX `idx_software_code` (`software_code`),
  87. INDEX `idx_created_at` (`created_at`)
  88. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='充值记录表';
  89. -- ============================================
  90. -- 5. Steam账号绑定表(steam_accounts)
  91. -- 功能:存储用户绑定的Steam账号信息
  92. -- ============================================
  93. CREATE TABLE IF NOT EXISTS `steam_accounts` (
  94. `id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
  95. `user_id` INT NOT NULL COMMENT '用户ID',
  96. `steam_username` VARCHAR(100) NOT NULL COMMENT 'Steam用户名',
  97. `steam_id` VARCHAR(50) COMMENT 'Steam ID',
  98. `shared_secret` TEXT COMMENT 'Steam Guard共享密钥(加密存储)',
  99. `identity_secret` TEXT COMMENT 'Steam Guard身份密钥(加密存储)',
  100. `is_active` TINYINT(1) DEFAULT 1 COMMENT '是否启用:1-启用,0-禁用',
  101. `last_used_time` DATETIME COMMENT '最后使用时间',
  102. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '绑定时间',
  103. `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  104. INDEX `idx_user_id` (`user_id`),
  105. INDEX `idx_steam_username` (`steam_username`),
  106. INDEX `idx_is_active` (`is_active`)
  107. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Steam账号绑定表';
  108. -- ============================================
  109. -- 6. API密钥表(api_keys)
  110. -- 功能:存储RSA公钥和私钥,支持密钥轮换
  111. -- ============================================
  112. CREATE TABLE IF NOT EXISTS `api_keys` (
  113. `id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
  114. `public_key` TEXT NOT NULL COMMENT 'RSA公钥(PEM格式)',
  115. `private_key` TEXT NOT NULL COMMENT 'RSA私钥(PEM格式,加密存储)',
  116. `key_version` INT NOT NULL COMMENT '密钥版本号',
  117. `is_active` TINYINT(1) DEFAULT 1 COMMENT '是否激活:1-激活,0-非激活',
  118. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  119. `expire_at` DATETIME COMMENT '过期时间(创建时间+10天)',
  120. INDEX `idx_key_version` (`key_version`),
  121. INDEX `idx_is_active` (`is_active`),
  122. INDEX `idx_expire_at` (`expire_at`)
  123. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API密钥表';
  124. -- ============================================
  125. -- 7. 密钥轮换配置表(key_rotation_config)
  126. -- 功能:配置密钥轮换周期等参数
  127. -- ============================================
  128. CREATE TABLE IF NOT EXISTS `key_rotation_config` (
  129. `id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
  130. `rotation_days` INT DEFAULT 10 COMMENT '密钥轮换周期(天)',
  131. `is_auto_rotate` TINYINT(1) DEFAULT 1 COMMENT '是否自动轮换:1-是,0-否',
  132. `last_rotation_time` DATETIME COMMENT '最后轮换时间',
  133. `next_rotation_time` DATETIME COMMENT '下次轮换时间',
  134. `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  135. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='密钥轮换配置表';
  136. -- ============================================
  137. -- 8. 公告表(announcements)
  138. -- 功能:存储产品公告信息
  139. -- ============================================
  140. CREATE TABLE IF NOT EXISTS `announcements` (
  141. `id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
  142. `title` VARCHAR(200) NOT NULL COMMENT '公告标题',
  143. `content` TEXT NOT NULL COMMENT '公告内容',
  144. `priority` TINYINT DEFAULT 0 COMMENT '优先级:0-普通,1-重要,2-紧急',
  145. `is_active` TINYINT(1) DEFAULT 1 COMMENT '是否启用:1-启用,0-禁用',
  146. `publish_time` DATETIME COMMENT '发布时间',
  147. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  148. `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  149. INDEX `idx_is_active` (`is_active`),
  150. INDEX `idx_priority` (`priority`),
  151. INDEX `idx_publish_time` (`publish_time`)
  152. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='公告表';
  153. -- ============================================
  154. -- 9. API日志表(api_logs)
  155. -- 功能:记录所有API接口调用日志
  156. -- ============================================
  157. CREATE TABLE IF NOT EXISTS `api_logs` (
  158. `id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
  159. `user_id` INT COMMENT '用户ID(可为NULL,如登录接口)',
  160. `endpoint` VARCHAR(200) NOT NULL COMMENT '接口路径',
  161. `method` VARCHAR(10) NOT NULL COMMENT 'HTTP方法:GET、POST等',
  162. `request_data` TEXT COMMENT '请求数据(加密前或解密后)',
  163. `response_data` TEXT COMMENT '响应数据(加密前或解密后)',
  164. `ip_address` VARCHAR(50) COMMENT '客户端IP地址',
  165. `user_agent` VARCHAR(500) COMMENT '用户代理',
  166. `response_code` INT COMMENT '响应状态码',
  167. `execution_time` INT COMMENT '执行时间(毫秒)',
  168. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  169. INDEX `idx_user_id` (`user_id`),
  170. INDEX `idx_endpoint` (`endpoint`),
  171. INDEX `idx_method` (`method`),
  172. INDEX `idx_ip_address` (`ip_address`),
  173. INDEX `idx_created_at` (`created_at`),
  174. INDEX `idx_response_code` (`response_code`)
  175. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API日志表';
  176. -- ============================================
  177. -- 10. 管理员表(admins)
  178. -- 功能:存储管理后台管理员账号
  179. -- ============================================
  180. CREATE TABLE IF NOT EXISTS `admins` (
  181. `id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
  182. `username` VARCHAR(50) UNIQUE NOT NULL COMMENT '管理员用户名',
  183. `password` VARCHAR(255) NOT NULL COMMENT '密码(加密存储)',
  184. `real_name` VARCHAR(50) COMMENT '真实姓名',
  185. `email` VARCHAR(100) COMMENT '邮箱',
  186. `role` VARCHAR(20) DEFAULT 'admin' COMMENT '角色:admin-管理员,super_admin-超级管理员',
  187. `last_login_time` DATETIME COMMENT '最后登录时间',
  188. `last_login_ip` VARCHAR(50) COMMENT '最后登录IP',
  189. `status` TINYINT(1) DEFAULT 1 COMMENT '状态:1-正常,0-禁用',
  190. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  191. `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  192. INDEX `idx_username` (`username`),
  193. INDEX `idx_role` (`role`),
  194. INDEX `idx_status` (`status`)
  195. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='管理员表';
  196. -- ============================================
  197. -- 11. 操作日志表(operation_logs)
  198. -- 功能:记录管理后台的操作日志
  199. -- ============================================
  200. CREATE TABLE IF NOT EXISTS `operation_logs` (
  201. `id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
  202. `admin_id` INT COMMENT '管理员ID',
  203. `module` VARCHAR(50) COMMENT '操作模块',
  204. `action` VARCHAR(50) COMMENT '操作动作',
  205. `description` VARCHAR(500) COMMENT '操作描述',
  206. `old_data` TEXT COMMENT '操作前数据(JSON)',
  207. `new_data` TEXT COMMENT '操作后数据(JSON)',
  208. `ip_address` VARCHAR(50) COMMENT 'IP地址',
  209. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
  210. INDEX `idx_admin_id` (`admin_id`),
  211. INDEX `idx_module` (`module`),
  212. INDEX `idx_action` (`action`),
  213. INDEX `idx_created_at` (`created_at`),
  214. FOREIGN KEY (`admin_id`) REFERENCES `admins`(`id`) ON DELETE SET NULL
  215. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作日志表';
  216. -- ============================================
  217. -- 初始化数据
  218. -- ============================================
  219. -- 插入默认软件信息
  220. INSERT INTO `software` (`code`, `name`, `description`, `daily_price`, `is_active`) VALUES
  221. ('buff-xp-steam-sh', '游铛铛-Buff选品Steam扫货', 'Buff平台选品和Steam平台扫货软件', 10.00, 1)
  222. ON DUPLICATE KEY UPDATE `name`=VALUES(`name`);
  223. -- 插入默认密钥轮换配置
  224. INSERT INTO `key_rotation_config` (`rotation_days`, `is_auto_rotate`) VALUES
  225. (10, 1)
  226. ON DUPLICATE KEY UPDATE `rotation_days`=VALUES(`rotation_days`);
  227. -- 插入默认管理员账号(密码:admin123,实际使用时需要加密)
  228. -- 注意:实际部署时需要修改密码
  229. INSERT INTO `admins` (`username`, `password`, `real_name`, `role`, `status`) VALUES
  230. ('admin', '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewY5GyYqBWVHxkd0', '系统管理员', 'super_admin', 1)
  231. ON DUPLICATE KEY UPDATE `username`=VALUES(`username`);
  232. -- ============================================
  233. -- 数据库设计说明
  234. -- ============================================
  235. -- 1. 所有表使用utf8mb4字符集,支持emoji和特殊字符
  236. -- 2. 所有时间字段使用DATETIME类型
  237. -- 3. 密码字段使用VARCHAR(255),支持各种加密算法
  238. -- 4. 外键约束保证数据完整性
  239. -- 5. 索引优化查询性能
  240. -- 6. 软删除使用status字段,不物理删除数据
  241. -- ============================================