content.sql 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  1. -- ------------------------------
  2. -- 1. 专辑表(已包含已添加的管理字段)
  3. -- ------------------------------
  4. CREATE TABLE `album` (
  5. `id` INT AUTO_INCREMENT PRIMARY KEY,
  6. `album_name` VARCHAR(100) NOT NULL COMMENT '专辑名称',
  7. `artist_id` INT NOT NULL COMMENT '关联artist服务的artist.id',
  8. `artist_name` VARCHAR(16) COMMENT '关联artist服务的artist.name',
  9. `cover_url` VARCHAR(255) COMMENT '专辑封面URL',
  10. `release_time` DATE COMMENT '发行时间',
  11. `description` TEXT COMMENT '专辑描述(介绍专辑主题、曲目等)',
  12. `album_type` TINYINT DEFAULT 1 COMMENT '专辑类型:1-数字专辑,2-实体专辑,3-EP',
  13. `price` DECIMAL(10,2) COMMENT '专辑价格(实体专辑或付费数字专辑使用)',
  14. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  15. `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  16. -- 已添加的管理字段
  17. `status` TINYINT DEFAULT 0 COMMENT '专辑状态:0--审核中,1-审核失败,2-发布中,3-已上架,4-已下架',
  18. `audit_reason` VARCHAR(500) COMMENT '审核失败原因',
  19. `audit_time` DATETIME COMMENT '审核时间',
  20. `publish_time` DATETIME COMMENT '发布时间',
  21. `shelf_time` DATETIME COMMENT '上架时间',
  22. `off_shelf_time` DATETIME COMMENT '下架时间',
  23. `delete_flag` TINYINT DEFAULT 0 COMMENT '删除标志:0-未删除,1-已删除',
  24. `delete_time` DATETIME COMMENT '删除时间',
  25. INDEX `idx_album_name` (`album_name`),
  26. INDEX `idx_artist_id` (`artist_id`),
  27. INDEX `idx_status` (`status`)
  28. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='专辑表';
  29. -- ------------------------------
  30. -- 2. 歌曲表(已包含已添加的管理字段)
  31. -- ------------------------------
  32. CREATE TABLE `song` (
  33. `id` INT AUTO_INCREMENT PRIMARY KEY,
  34. `song_name` VARCHAR(100) NOT NULL COMMENT '歌曲名称',
  35. `artist_id` INT NOT NULL COMMENT '关联artist服务的artist.id',
  36. `album_id` INT COMMENT '关联本服务的album.id(可为空,单曲不关联专辑)',
  37. `album_name` VARCHAR(100) NOT NULL COMMENT '专辑名称',
  38. `duration` INT COMMENT '时长(秒,如300秒=5分钟)',
  39. `file_url` VARCHAR(255) NOT NULL COMMENT '歌曲音频文件URL',
  40. `cover_url` VARCHAR(255) COMMENT '歌曲封面URL(优先使用专辑封面,无专辑时用此封面)',
  41. `release_time` DATE COMMENT '发行时间',
  42. `lyrics` TEXT COMMENT '歌词(冗余存储,核心歌词)',
  43. `play_count` BIGINT DEFAULT 0 COMMENT '播放量',
  44. `is_paid` TINYINT DEFAULT 0 COMMENT '是否付费:0-免费,1-付费',
  45. `price` DECIMAL(10,2) DEFAULT 0.00 COMMENT '单曲价格',
  46. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  47. `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  48. -- 已添加的管理字段
  49. `status` TINYINT DEFAULT 0 COMMENT '歌曲状态:0-草稿,1-审核中,2-审核失败,3-发布中,4-已上架,5-已下架',
  50. `audit_reason` VARCHAR(500) COMMENT '审核失败原因',
  51. `audit_time` DATETIME COMMENT '审核时间',
  52. `publish_time` DATETIME COMMENT '发布时间',
  53. `shelf_time` DATETIME COMMENT '上架时间',
  54. `off_shelf_time` DATETIME COMMENT '下架时间',
  55. `delete_flag` TINYINT DEFAULT 0 COMMENT '删除标志:0-未删除,1-已删除',
  56. `delete_time` DATETIME COMMENT '删除时间',
  57. `song_type` VARCHAR(50) COMMENT '歌曲类型',
  58. `version` VARCHAR(50) COMMENT '版本',
  59. `work_type` VARCHAR(50) COMMENT '作品类型',
  60. `genre` VARCHAR(255) COMMENT '音乐风格',
  61. `language` VARCHAR(20) COMMENT '语言',
  62. `lyricist` VARCHAR(100) COMMENT '作词人',
  63. `composer` VARCHAR(100) COMMENT '作曲人',
  64. `arranger` VARCHAR(100) COMMENT '编曲人',
  65. `singer_name` VARCHAR(100) COMMENT '演唱者姓名',
  66. FOREIGN KEY (`album_id`) REFERENCES `album` (`id`) ON DELETE SET NULL,
  67. INDEX `idx_song_name` (`song_name`),
  68. INDEX `idx_play_count` (`play_count`),
  69. INDEX `idx_artist_id` (`artist_id`),
  70. INDEX `idx_status` (`status`),
  71. INDEX `idx_delete_flag` (`delete_flag`)
  72. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='歌曲表';
  73. -- ------------------------------
  74. -- 3. 歌单表(关联auth服务的user.id,逻辑关联)
  75. -- ------------------------------
  76. CREATE TABLE `playlist` (
  77. `id` INT AUTO_INCREMENT PRIMARY KEY,
  78. `user_id` INT NOT NULL COMMENT '关联auth服务的user.id',
  79. `playlist_name` VARCHAR(100) NOT NULL COMMENT '歌单名称',
  80. `cover_url` VARCHAR(255) COMMENT '歌单封面URL',
  81. `description` TEXT COMMENT '歌单描述',
  82. `tag` VARCHAR(255) COMMENT '歌单标签(多个用逗号分隔)',
  83. `status` Boolean DEFAULT true COMMENT '0-公开,1-私密',
  84. `song_count` INT DEFAULT 0 COMMENT '歌单歌曲数量',
  85. `play_count` BIGINT DEFAULT 0 COMMENT '歌单播放量',
  86. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  87. `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  88. INDEX `idx_playlist_name` (`playlist_name`),
  89. INDEX `idx_user_id` (`user_id`) -- 逻辑关联索引
  90. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='歌单表';
  91. -- ------------------------------
  92. -- 4. 歌单-歌曲关联表(关联本服务的playlist和song表)
  93. -- ------------------------------
  94. CREATE TABLE `playlist_song` (
  95. `id` INT AUTO_INCREMENT PRIMARY KEY,
  96. `playlist_id` INT NOT NULL COMMENT '关联本服务的playlist.id',
  97. `song_id` INT NOT NULL COMMENT '关联本服务的song.id',
  98. `order_num` INT NOT NULL COMMENT '歌曲在歌单中的排序序号',
  99. `add_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '歌曲添加时间',
  100. FOREIGN KEY (`playlist_id`) REFERENCES `playlist` (`id`) ON DELETE CASCADE,
  101. FOREIGN KEY (`song_id`) REFERENCES `song` (`id`) ON DELETE CASCADE,
  102. UNIQUE KEY `uk_playlist_song` (`playlist_id`, `song_id`),
  103. INDEX `idx_order_num` (`order_num`)
  104. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='歌单-歌曲关联表';
  105. -- ------------------------------
  106. -- 10. 歌词表(关联本服务的song.id、auth服务的user.id)
  107. -- ------------------------------
  108. CREATE TABLE `lyric` (
  109. `id` INT AUTO_INCREMENT PRIMARY KEY,
  110. `lyric_name` VARCHAR(32) NOT NULL COMMENT '歌词名',
  111. `song_id` INT NOT NULL COMMENT '关联本服务的song.id',
  112. `lyrics` TEXT NOT NULL COMMENT 'LRC格式歌词文本',
  113. `language` VARCHAR(20) DEFAULT 'zh' COMMENT '歌词语言(zh-中文,en-英文等)',
  114. `version` VARCHAR(50) COMMENT '歌词版本(如艺人原版、用户翻译版)',
  115. `upload_user_id` INT NOT NULL COMMENT '上传用户ID,关联auth服务的user.id',
  116. `status` TINYINT DEFAULT 0 COMMENT '状态:0-待审核,1-已通过,2-已驳回',
  117. `lyric_reason` VARCHAR(500) COMMENT '审核失败原因',
  118. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
  119. FOREIGN KEY (`song_id`) REFERENCES `song` (`id`) ON DELETE CASCADE,
  120. INDEX `idx_song_id` (`song_id`),
  121. INDEX `idx_upload_user_id` (`upload_user_id`) -- 逻辑关联索引
  122. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='歌词表(多版本支持)';
  123. -- ------------------------------
  124. -- 5. 每日推荐表(关联auth服务的user.id、本服务的song.id)
  125. -- ------------------------------
  126. CREATE TABLE `daily_recommend` (
  127. `id` INT AUTO_INCREMENT PRIMARY KEY,
  128. `user_id` INT NOT NULL COMMENT '关联auth服务的user.id',
  129. `song_id` INT NOT NULL COMMENT '关联本服务的song.id',
  130. `recommend_date` DATE NOT NULL COMMENT '推荐日期',
  131. `reason` VARCHAR(255) COMMENT '推荐理由',
  132. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  133. UNIQUE KEY `uk_user_song_date` (`user_id`, `song_id`, `recommend_date`),
  134. INDEX `idx_recommend_date` (`recommend_date`),
  135. INDEX `idx_user_id` (`user_id`), -- 逻辑关联索引
  136. INDEX `idx_song_id` (`song_id`)
  137. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='每日推荐表';
  138. -- ------------------------------
  139. -- 6. 我喜欢的音乐表(关联auth服务的user.id、本服务的song.id)
  140. -- ------------------------------
  141. CREATE TABLE `user_favorite_song` (
  142. `id` INT AUTO_INCREMENT PRIMARY KEY,
  143. `user_id` INT NOT NULL COMMENT '关联auth服务的user.id',
  144. `song_id` INT NOT NULL COMMENT '关联本服务的song.id',
  145. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '收藏时间',
  146. UNIQUE KEY `uk_user_song` (`user_id`, `song_id`),
  147. INDEX `idx_user_id` (`user_id`), -- 逻辑关联索引
  148. INDEX `idx_song_id` (`song_id`)
  149. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='我喜欢的音乐表';
  150. -- ------------------------------
  151. -- 8. 我关注的用户表(关联auth服务的user.id)
  152. -- ------------------------------
  153. CREATE TABLE `user_follow` (
  154. `id` INT AUTO_INCREMENT PRIMARY KEY,
  155. `follower_id` INT NOT NULL COMMENT '关注者ID,关联auth服务的user.id',
  156. `followed_id` INT NOT NULL COMMENT '被关注者ID,关联auth服务的user.id',
  157. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '关注时间',
  158. UNIQUE KEY `uk_follower_followed` (`follower_id`, `followed_id`),
  159. INDEX `idx_follower_id` (`follower_id`), -- 逻辑关联索引
  160. INDEX `idx_followed_id` (`followed_id`) -- 逻辑关联索引
  161. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='我关注的用户表';
  162. -- ------------------------------
  163. -- 9. 收藏歌单表(关联auth服务的user.id、本服务的playlist.id)
  164. -- ------------------------------
  165. CREATE TABLE `user_playlist_favorite` (
  166. `id` INT AUTO_INCREMENT PRIMARY KEY,
  167. `user_id` INT NOT NULL COMMENT '关联auth服务的user.id',
  168. `playlist_id` INT NOT NULL COMMENT '关联本服务的playlist.id',
  169. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '收藏时间',
  170. FOREIGN KEY (`playlist_id`) REFERENCES `playlist` (`id`) ON DELETE CASCADE,
  171. UNIQUE KEY `uk_user_playlist` (`user_id`, `playlist_id`),
  172. INDEX `idx_user_id` (`user_id`) -- 逻辑关联索引
  173. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='我收藏的歌单表';
  174. -- ------------------------------
  175. -- 11. 歌曲推广表(关联artist服务的artist.id、本服务的song.id)
  176. -- ------------------------------
  177. CREATE TABLE `song_promotion` (
  178. `id` INT AUTO_INCREMENT PRIMARY KEY,
  179. `song_id` INT NOT NULL COMMENT '关联本服务的song.id',
  180. `artist_id` INT NOT NULL COMMENT '关联artist服务的artist.id',
  181. `promotion_type` TINYINT NOT NULL COMMENT '推广类型:1-首页推荐,2-热门榜单,3-新歌推荐,4-个性化推荐',
  182. `start_time` DATETIME NOT NULL COMMENT '推广开始时间',
  183. `end_time` DATETIME NOT NULL COMMENT '推广结束时间',
  184. `sort` INT DEFAULT 0 COMMENT '推荐排序权重(数值越小越靠前)',
  185. `status` TINYINT DEFAULT 1 COMMENT '状态:0-未生效,1-生效中,2-已过期',
  186. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  187. `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  188. UNIQUE KEY `uk_song_type` (`song_id`, `promotion_type`),
  189. INDEX `idx_promotion_type` (`promotion_type`),
  190. INDEX `idx_status` (`status`),
  191. INDEX `idx_time_range` (`start_time`, `end_time`),
  192. INDEX `idx_artist_id` (`artist_id`) -- 逻辑关联索引
  193. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='歌曲推广表';
  194. -- ------------------------------
  195. -- 12. 推广效果统计表(关联本服务的song_promotion表)
  196. -- ------------------------------
  197. CREATE TABLE `promotion_stat` (
  198. `id` INT AUTO_INCREMENT PRIMARY KEY,
  199. `promotion_id` INT NOT NULL COMMENT '关联本服务的song_promotion.id',
  200. `stat_date` DATE NOT NULL COMMENT '统计日期',
  201. `click_count` INT DEFAULT 0 COMMENT '点击量',
  202. `play_count` INT DEFAULT 0 COMMENT '播放量',
  203. `collect_count` INT DEFAULT 0 COMMENT '收藏量',
  204. `share_count` INT DEFAULT 0 COMMENT '分享量',
  205. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  206. FOREIGN KEY (`promotion_id`) REFERENCES `song_promotion` (`id`) ON DELETE CASCADE,
  207. UNIQUE KEY `uk_promotion_date` (`promotion_id`, `stat_date`),
  208. INDEX `idx_stat_date` (`stat_date`)
  209. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='推广效果统计表';
  210. -- ------------------------------
  211. -- 13. MV表(关联artist服务的artist.id)
  212. -- ------------------------------
  213. CREATE TABLE `mv` (
  214. `id` INT AUTO_INCREMENT PRIMARY KEY,
  215. `mv_name` VARCHAR(100) NOT NULL COMMENT 'MV名称',
  216. `artist_id` INT NOT NULL COMMENT '关联artist服务的artist.id',
  217. `artist_name` VARCHAR(100) NOT NULL COMMENT '艺人名称',
  218. `cover_url` VARCHAR(255) NOT NULL COMMENT 'MV封面URL',
  219. `video_url` VARCHAR(255) NOT NULL COMMENT 'MV视频文件URL',
  220. `description` TEXT COMMENT 'MV描述',
  221. `tags` VARCHAR(255) COMMENT 'MV标签(多个用逗号分隔)',
  222. `duration` INT COMMENT '时长(秒)',
  223. `view_count` BIGINT DEFAULT 0 COMMENT '播放量',
  224. `like_count` BIGINT DEFAULT 0 COMMENT '点赞数',
  225. `comment_count` BIGINT DEFAULT 0 COMMENT '评论数',
  226. `share_count` BIGINT DEFAULT 0 COMMENT '分享数',
  227. `release_time` DATE COMMENT '发布时间',
  228. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  229. `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  230. `status` TINYINT DEFAULT 0 COMMENT 'MV状态:0-审核中,1-审核失败,2-发布中,3-已上架,4-已下架',
  231. `audit_reason` VARCHAR(500) COMMENT '审核失败原因',
  232. `audit_time` DATETIME COMMENT '审核时间',
  233. `publish_time` DATETIME COMMENT '发布时间',
  234. `shelf_time` DATETIME COMMENT '上架时间',
  235. `off_shelf_time` DATETIME COMMENT '下架时间',
  236. `delete_flag` TINYINT DEFAULT 0 COMMENT '删除标志:0-未删除,1-已删除',
  237. `delete_time` DATETIME COMMENT '删除时间',
  238. INDEX `idx_mv_name` (`mv_name`),
  239. INDEX `idx_artist_id` (`artist_id`),
  240. INDEX `idx_status` (`status`),
  241. INDEX `idx_view_count` (`view_count`),
  242. INDEX `idx_delete_flag` (`delete_flag`)
  243. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='MV表';
  244. -- ------------------------------
  245. -- 14. MV收藏表(关联auth服务的user.id、本服务的mv.id)
  246. -- ------------------------------
  247. CREATE TABLE `mv_favorite` (
  248. `id` INT AUTO_INCREMENT PRIMARY KEY,
  249. `user_id` INT NOT NULL COMMENT '用户ID,关联auth服务的user.id',
  250. `mv_id` INT NOT NULL COMMENT 'MV ID,关联本服务的mv.id',
  251. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '收藏时间',
  252. UNIQUE KEY `uk_user_mv` (`user_id`, `mv_id`),
  253. INDEX `idx_user_id` (`user_id`), -- 逻辑关联索引
  254. INDEX `idx_mv_id` (`mv_id`),
  255. FOREIGN KEY (`mv_id`) REFERENCES `mv` (`id`) ON DELETE CASCADE
  256. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='MV收藏表';
  257. -- ------------------------------
  258. -- 15. 评论表(关联auth服务的user.id、本服务的song.id或mv.id)
  259. -- ------------------------------
  260. CREATE TABLE `comment` (
  261. `id` INT AUTO_INCREMENT PRIMARY KEY,
  262. `user_id` INT NOT NULL COMMENT '评论用户ID,关联auth服务的user.id',
  263. `content_type` TINYINT NOT NULL COMMENT '内容类型:0-歌曲,1-MV , 2歌曲' ,
  264. `content_id` INT NOT NULL COMMENT '关联内容ID,根据content_type关联song.id或mv.id',
  265. `parent_id` INT DEFAULT NULL COMMENT '父评论ID,用于回复评论,NULL表示顶级评论',
  266. `content` TEXT NOT NULL COMMENT '评论内容',
  267. `like_count` INT DEFAULT 0 COMMENT '点赞数',
  268. `reply_count` INT DEFAULT 0 COMMENT '回复数',
  269. `status` TINYINT DEFAULT 1 COMMENT '评论状态:0-已删除,1-正常,2-审核中,3-审核不通过',
  270. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  271. `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  272. -- 普通索引(保留原逻辑,优化查询效率)
  273. INDEX `idx_user_id` (`user_id`), -- 逻辑关联索引,快速查询某用户的所有评论
  274. INDEX `idx_content_type` (`content_type`), -- 快速按内容类型筛选评论
  275. INDEX `idx_content_id` (`content_id`), -- 快速按内容ID筛选评论
  276. INDEX `idx_parent_id` (`parent_id`), -- 快速查询某评论的所有回复
  277. INDEX `idx_create_time` (`create_time`), -- 快速按创建时间排序/筛选评论
  278. -- 复合索引(优化联合查询,比单独索引更高效)
  279. INDEX `idx_content_type_id` (`content_type`, `content_id`) -- 便于按内容类型+内容ID批量查询评论
  280. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='评论表(支持歌曲和MV评论)';
  281. # // 用户等级表
  282. CREATE TABLE `user_level` (
  283. `id` INT AUTO_INCREMENT PRIMARY KEY,
  284. `user_id` INT NOT NULL COMMENT '用户ID',
  285. `level` INT DEFAULT 1 COMMENT '等级',
  286. `exp` INT DEFAULT 0 COMMENT '经验值',
  287. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  288. UNIQUE KEY `uk_user_id` (`user_id`)
  289. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户等级表';
  290. # // 用户签到表
  291. CREATE TABLE `user_sign_in` (
  292. `id` INT AUTO_INCREMENT PRIMARY KEY,
  293. `user_id` INT NOT NULL COMMENT '用户ID',
  294. `sign_date` DATE NOT NULL COMMENT '签到日期',
  295. `experience` INT DEFAULT 0 COMMENT '获得经验',
  296. `continuous_days` TINYINT DEFAULT 1 COMMENT '连续签到天数(首次签到为1,断签后重置为1)',
  297. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  298. UNIQUE KEY `uk_user_sign_date` (`user_id`, `sign_date`),
  299. INDEX `idx_user_id` (`user_id`)
  300. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户签到记录表';
  301. -- 通用播放记录表(支持歌曲、MV)
  302. CREATE TABLE `play_record` (
  303. `id` INT AUTO_INCREMENT PRIMARY KEY,
  304. `resource_type` TINYINT NOT NULL COMMENT '资源类型:1-歌曲,2-MV',
  305. `resource_id` INT NOT NULL COMMENT '资源ID,歌曲ID或MV ID',
  306. `user_id` INT NOT NULL COMMENT '播放用户ID,关联user表',
  307. `play_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '播放时间',
  308. -- 联合索引:优化按类型+资源ID/用户ID/时间的查询
  309. INDEX `idx_resource_type_id` (`resource_type`, `resource_id`),
  310. INDEX `idx_user_id` (`user_id`),
  311. INDEX `idx_play_time` (`play_time`)
  312. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='通用播放记录表(歌曲/MV)';
  313. -- 最近播放统计表(支持歌曲和MV)
  314. CREATE TABLE `recent_play_stats` (
  315. `id` INT AUTO_INCREMENT PRIMARY KEY,
  316. `user_id` INT NOT NULL COMMENT '播放用户ID,关联user表',
  317. `content_type` TINYINT NOT NULL COMMENT '资源类型:1-歌曲,2-MV',
  318. `content_id` INT NOT NULL COMMENT '内容ID(歌曲ID或MV ID)',
  319. `first_play_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '首次播放时间',
  320. `last_play_time` DATETIME DEF AULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后播放时间',
  321. UNIQUE KEY `uk_user_content_type_id` (`user_id`, `content_type`, `content_id`),
  322. INDEX `idx_user_id` (`user_id`),
  323. INDEX `idx_content_type` (`content_type`),
  324. INDEX `idx_content_id` (`content_id`),
  325. INDEX `idx_last_play_time` (`last_play_time`)
  326. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='最近播放统计表(歌曲和MV通用)';
  327. -- 榜单主表(终极兼容版,支持 MySQL 5.5+ 所有版本)
  328. CREATE TABLE `chart` (
  329. `id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '榜单ID',
  330. `chart_name` VARCHAR(100) NOT NULL COMMENT '榜单名称,如:热歌榜、新歌榜、飙升榜、周榜、月榜等',
  331. `description` VARCHAR(500) COMMENT '榜单描述',
  332. `cover_url` VARCHAR(255) COMMENT '榜单封面图片URL',
  333. `create_date` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建日期',
  334. `update_date` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新日期'
  335. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通用榜单主表';
  336. -- 榜单项表(终极兼容版,支持 MySQL 5.5+ 所有版本)
  337. CREATE TABLE `chart_item` (
  338. `id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '榜单项ID',
  339. `chart_id` INT NOT NULL COMMENT '关联榜单ID',
  340. `song_id` INT NOT NULL COMMENT '关联歌曲ID',
  341. `chart_date` DATE NOT NULL COMMENT '上榜日期',
  342. `chart_rank` INT NOT NULL COMMENT '排名',
  343. `previous_rank` INT COMMENT '上期排名,用于计算排名变化',
  344. `score` DECIMAL(10,2) DEFAULT 0.00 COMMENT '得分(核心排序依据)',
  345. `play_count` BIGINT DEFAULT 0 COMMENT '播放量(当期)',
  346. `like_count` BIGINT DEFAULT 0 COMMENT '点赞量(当期)',
  347. `collect_count` BIGINT DEFAULT 0 COMMENT '收藏量(当期)',
  348. `comment_count` BIGINT DEFAULT 0 COMMENT '评论量(当期)',
  349. `data_source` VARCHAR(100) COMMENT '数据来源说明',
  350. `change_status` TINYINT DEFAULT 0 COMMENT '排名变化状态:0-无变化,1-上升,2-下降,3-新上榜,4-重新上榜',
  351. `create_date` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建日期',
  352. `update_date` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新日期',
  353. UNIQUE KEY `uk_chart_song_date` (`chart_id`, `song_id`, `chart_date`),
  354. INDEX `idx_chart_id` (`chart_id`),
  355. INDEX `idx_song_id` (`song_id`),
  356. INDEX `idx_chart_date` (`chart_date`),
  357. INDEX `idx_rank` (`chart_rank`),
  358. INDEX `idx_previous_rank` (`previous_rank`),
  359. INDEX `idx_change_status` (`change_status`),
  360. CONSTRAINT `fk_chart_item_chart` FOREIGN KEY (`chart_id`) REFERENCES `chart` (`id`) ON DELETE CASCADE,
  361. CONSTRAINT `fk_chart_item_song` FOREIGN KEY (`song_id`) REFERENCES `song` (`id`) ON DELETE CASCADE
  362. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='榜单项表(与歌曲关联)';