-- ------------------------------ -- 1. 专辑表(已包含已添加的管理字段) -- ------------------------------ CREATE TABLE `album` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `album_name` VARCHAR(100) NOT NULL COMMENT '专辑名称', `artist_id` INT NOT NULL COMMENT '关联artist服务的artist.id', `artist_name` VARCHAR(16) COMMENT '关联artist服务的artist.name', `cover_url` VARCHAR(255) COMMENT '专辑封面URL', `release_time` DATE COMMENT '发行时间', `description` TEXT COMMENT '专辑描述(介绍专辑主题、曲目等)', `album_type` TINYINT DEFAULT 1 COMMENT '专辑类型:1-数字专辑,2-实体专辑,3-EP', `price` DECIMAL(10,2) COMMENT '专辑价格(实体专辑或付费数字专辑使用)', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 已添加的管理字段 `status` TINYINT DEFAULT 0 COMMENT '专辑状态:0--审核中,1-审核失败,2-发布中,3-已上架,4-已下架', `audit_reason` VARCHAR(500) COMMENT '审核失败原因', `audit_time` DATETIME COMMENT '审核时间', `publish_time` DATETIME COMMENT '发布时间', `shelf_time` DATETIME COMMENT '上架时间', `off_shelf_time` DATETIME COMMENT '下架时间', `delete_flag` TINYINT DEFAULT 0 COMMENT '删除标志:0-未删除,1-已删除', `delete_time` DATETIME COMMENT '删除时间', INDEX `idx_album_name` (`album_name`), INDEX `idx_artist_id` (`artist_id`), INDEX `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='专辑表'; -- ------------------------------ -- 2. 歌曲表(已包含已添加的管理字段) -- ------------------------------ CREATE TABLE `song` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `song_name` VARCHAR(100) NOT NULL COMMENT '歌曲名称', `artist_id` INT NOT NULL COMMENT '关联artist服务的artist.id', `album_id` INT COMMENT '关联本服务的album.id(可为空,单曲不关联专辑)', `album_name` VARCHAR(100) NOT NULL COMMENT '专辑名称', `duration` INT COMMENT '时长(秒,如300秒=5分钟)', `file_url` VARCHAR(255) NOT NULL COMMENT '歌曲音频文件URL', `cover_url` VARCHAR(255) COMMENT '歌曲封面URL(优先使用专辑封面,无专辑时用此封面)', `release_time` DATE COMMENT '发行时间', `lyrics` TEXT COMMENT '歌词(冗余存储,核心歌词)', `play_count` BIGINT DEFAULT 0 COMMENT '播放量', `is_paid` TINYINT DEFAULT 0 COMMENT '是否付费:0-免费,1-付费', `price` DECIMAL(10,2) DEFAULT 0.00 COMMENT '单曲价格', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 已添加的管理字段 `status` TINYINT DEFAULT 0 COMMENT '歌曲状态:0-草稿,1-审核中,2-审核失败,3-发布中,4-已上架,5-已下架', `audit_reason` VARCHAR(500) COMMENT '审核失败原因', `audit_time` DATETIME COMMENT '审核时间', `publish_time` DATETIME COMMENT '发布时间', `shelf_time` DATETIME COMMENT '上架时间', `off_shelf_time` DATETIME COMMENT '下架时间', `delete_flag` TINYINT DEFAULT 0 COMMENT '删除标志:0-未删除,1-已删除', `delete_time` DATETIME COMMENT '删除时间', `song_type` VARCHAR(50) COMMENT '歌曲类型', `version` VARCHAR(50) COMMENT '版本', `work_type` VARCHAR(50) COMMENT '作品类型', `genre` VARCHAR(255) COMMENT '音乐风格', `language` VARCHAR(20) COMMENT '语言', `lyricist` VARCHAR(100) COMMENT '作词人', `composer` VARCHAR(100) COMMENT '作曲人', `arranger` VARCHAR(100) COMMENT '编曲人', `singer_name` VARCHAR(100) COMMENT '演唱者姓名', FOREIGN KEY (`album_id`) REFERENCES `album` (`id`) ON DELETE SET NULL, INDEX `idx_song_name` (`song_name`), INDEX `idx_play_count` (`play_count`), INDEX `idx_artist_id` (`artist_id`), INDEX `idx_status` (`status`), INDEX `idx_delete_flag` (`delete_flag`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='歌曲表'; -- ------------------------------ -- 3. 歌单表(关联auth服务的user.id,逻辑关联) -- ------------------------------ CREATE TABLE `playlist` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `user_id` INT NOT NULL COMMENT '关联auth服务的user.id', `playlist_name` VARCHAR(100) NOT NULL COMMENT '歌单名称', `cover_url` VARCHAR(255) COMMENT '歌单封面URL', `description` TEXT COMMENT '歌单描述', `tag` VARCHAR(255) COMMENT '歌单标签(多个用逗号分隔)', `status` Boolean DEFAULT true COMMENT '0-公开,1-私密', `song_count` INT DEFAULT 0 COMMENT '歌单歌曲数量', `play_count` BIGINT DEFAULT 0 COMMENT '歌单播放量', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX `idx_playlist_name` (`playlist_name`), INDEX `idx_user_id` (`user_id`) -- 逻辑关联索引 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='歌单表'; -- ------------------------------ -- 4. 歌单-歌曲关联表(关联本服务的playlist和song表) -- ------------------------------ CREATE TABLE `playlist_song` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `playlist_id` INT NOT NULL COMMENT '关联本服务的playlist.id', `song_id` INT NOT NULL COMMENT '关联本服务的song.id', `order_num` INT NOT NULL COMMENT '歌曲在歌单中的排序序号', `add_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '歌曲添加时间', FOREIGN KEY (`playlist_id`) REFERENCES `playlist` (`id`) ON DELETE CASCADE, FOREIGN KEY (`song_id`) REFERENCES `song` (`id`) ON DELETE CASCADE, UNIQUE KEY `uk_playlist_song` (`playlist_id`, `song_id`), INDEX `idx_order_num` (`order_num`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='歌单-歌曲关联表'; -- ------------------------------ -- 10. 歌词表(关联本服务的song.id、auth服务的user.id) -- ------------------------------ CREATE TABLE `lyric` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `lyric_name` VARCHAR(32) NOT NULL COMMENT '歌词名', `song_id` INT NOT NULL COMMENT '关联本服务的song.id', `lyrics` TEXT NOT NULL COMMENT 'LRC格式歌词文本', `language` VARCHAR(20) DEFAULT 'zh' COMMENT '歌词语言(zh-中文,en-英文等)', `version` VARCHAR(50) COMMENT '歌词版本(如艺人原版、用户翻译版)', `upload_user_id` INT NOT NULL COMMENT '上传用户ID,关联auth服务的user.id', `status` TINYINT DEFAULT 0 COMMENT '状态:0-待审核,1-已通过,2-已驳回', `lyric_reason` VARCHAR(500) COMMENT '审核失败原因', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (`song_id`) REFERENCES `song` (`id`) ON DELETE CASCADE, INDEX `idx_song_id` (`song_id`), INDEX `idx_upload_user_id` (`upload_user_id`) -- 逻辑关联索引 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='歌词表(多版本支持)'; -- ------------------------------ -- 5. 每日推荐表(关联auth服务的user.id、本服务的song.id) -- ------------------------------ CREATE TABLE `daily_recommend` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `user_id` INT NOT NULL COMMENT '关联auth服务的user.id', `song_id` INT NOT NULL COMMENT '关联本服务的song.id', `recommend_date` DATE NOT NULL COMMENT '推荐日期', `reason` VARCHAR(255) COMMENT '推荐理由', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', UNIQUE KEY `uk_user_song_date` (`user_id`, `song_id`, `recommend_date`), INDEX `idx_recommend_date` (`recommend_date`), INDEX `idx_user_id` (`user_id`), -- 逻辑关联索引 INDEX `idx_song_id` (`song_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='每日推荐表'; -- ------------------------------ -- 6. 我喜欢的音乐表(关联auth服务的user.id、本服务的song.id) -- ------------------------------ CREATE TABLE `user_favorite_song` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `user_id` INT NOT NULL COMMENT '关联auth服务的user.id', `song_id` INT NOT NULL COMMENT '关联本服务的song.id', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '收藏时间', UNIQUE KEY `uk_user_song` (`user_id`, `song_id`), INDEX `idx_user_id` (`user_id`), -- 逻辑关联索引 INDEX `idx_song_id` (`song_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='我喜欢的音乐表'; -- ------------------------------ -- 8. 我关注的用户表(关联auth服务的user.id) -- ------------------------------ CREATE TABLE `user_follow` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `follower_id` INT NOT NULL COMMENT '关注者ID,关联auth服务的user.id', `followed_id` INT NOT NULL COMMENT '被关注者ID,关联auth服务的user.id', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '关注时间', UNIQUE KEY `uk_follower_followed` (`follower_id`, `followed_id`), INDEX `idx_follower_id` (`follower_id`), -- 逻辑关联索引 INDEX `idx_followed_id` (`followed_id`) -- 逻辑关联索引 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='我关注的用户表'; -- ------------------------------ -- 9. 收藏歌单表(关联auth服务的user.id、本服务的playlist.id) -- ------------------------------ CREATE TABLE `user_playlist_favorite` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `user_id` INT NOT NULL COMMENT '关联auth服务的user.id', `playlist_id` INT NOT NULL COMMENT '关联本服务的playlist.id', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '收藏时间', FOREIGN KEY (`playlist_id`) REFERENCES `playlist` (`id`) ON DELETE CASCADE, UNIQUE KEY `uk_user_playlist` (`user_id`, `playlist_id`), INDEX `idx_user_id` (`user_id`) -- 逻辑关联索引 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='我收藏的歌单表'; -- ------------------------------ -- 11. 歌曲推广表(关联artist服务的artist.id、本服务的song.id) -- ------------------------------ CREATE TABLE `song_promotion` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `song_id` INT NOT NULL COMMENT '关联本服务的song.id', `artist_id` INT NOT NULL COMMENT '关联artist服务的artist.id', `promotion_type` TINYINT NOT NULL COMMENT '推广类型:1-首页推荐,2-热门榜单,3-新歌推荐,4-个性化推荐', `start_time` DATETIME NOT NULL COMMENT '推广开始时间', `end_time` DATETIME NOT NULL COMMENT '推广结束时间', `sort` INT DEFAULT 0 COMMENT '推荐排序权重(数值越小越靠前)', `status` TINYINT DEFAULT 1 COMMENT '状态:0-未生效,1-生效中,2-已过期', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', UNIQUE KEY `uk_song_type` (`song_id`, `promotion_type`), INDEX `idx_promotion_type` (`promotion_type`), INDEX `idx_status` (`status`), INDEX `idx_time_range` (`start_time`, `end_time`), INDEX `idx_artist_id` (`artist_id`) -- 逻辑关联索引 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='歌曲推广表'; -- ------------------------------ -- 12. 推广效果统计表(关联本服务的song_promotion表) -- ------------------------------ CREATE TABLE `promotion_stat` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `promotion_id` INT NOT NULL COMMENT '关联本服务的song_promotion.id', `stat_date` DATE NOT NULL COMMENT '统计日期', `click_count` INT DEFAULT 0 COMMENT '点击量', `play_count` INT DEFAULT 0 COMMENT '播放量', `collect_count` INT DEFAULT 0 COMMENT '收藏量', `share_count` INT DEFAULT 0 COMMENT '分享量', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', FOREIGN KEY (`promotion_id`) REFERENCES `song_promotion` (`id`) ON DELETE CASCADE, UNIQUE KEY `uk_promotion_date` (`promotion_id`, `stat_date`), INDEX `idx_stat_date` (`stat_date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='推广效果统计表'; -- ------------------------------ -- 13. MV表(关联artist服务的artist.id) -- ------------------------------ CREATE TABLE `mv` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `mv_name` VARCHAR(100) NOT NULL COMMENT 'MV名称', `artist_id` INT NOT NULL COMMENT '关联artist服务的artist.id', `artist_name` VARCHAR(100) NOT NULL COMMENT '艺人名称', `cover_url` VARCHAR(255) NOT NULL COMMENT 'MV封面URL', `video_url` VARCHAR(255) NOT NULL COMMENT 'MV视频文件URL', `description` TEXT COMMENT 'MV描述', `tags` VARCHAR(255) COMMENT 'MV标签(多个用逗号分隔)', `duration` INT COMMENT '时长(秒)', `view_count` BIGINT DEFAULT 0 COMMENT '播放量', `like_count` BIGINT DEFAULT 0 COMMENT '点赞数', `comment_count` BIGINT DEFAULT 0 COMMENT '评论数', `share_count` BIGINT DEFAULT 0 COMMENT '分享数', `release_time` DATE COMMENT '发布时间', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `status` TINYINT DEFAULT 0 COMMENT 'MV状态:0-审核中,1-审核失败,2-发布中,3-已上架,4-已下架', `audit_reason` VARCHAR(500) COMMENT '审核失败原因', `audit_time` DATETIME COMMENT '审核时间', `publish_time` DATETIME COMMENT '发布时间', `shelf_time` DATETIME COMMENT '上架时间', `off_shelf_time` DATETIME COMMENT '下架时间', `delete_flag` TINYINT DEFAULT 0 COMMENT '删除标志:0-未删除,1-已删除', `delete_time` DATETIME COMMENT '删除时间', INDEX `idx_mv_name` (`mv_name`), INDEX `idx_artist_id` (`artist_id`), INDEX `idx_status` (`status`), INDEX `idx_view_count` (`view_count`), INDEX `idx_delete_flag` (`delete_flag`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='MV表'; -- ------------------------------ -- 14. MV收藏表(关联auth服务的user.id、本服务的mv.id) -- ------------------------------ CREATE TABLE `mv_favorite` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `user_id` INT NOT NULL COMMENT '用户ID,关联auth服务的user.id', `mv_id` INT NOT NULL COMMENT 'MV ID,关联本服务的mv.id', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '收藏时间', UNIQUE KEY `uk_user_mv` (`user_id`, `mv_id`), INDEX `idx_user_id` (`user_id`), -- 逻辑关联索引 INDEX `idx_mv_id` (`mv_id`), FOREIGN KEY (`mv_id`) REFERENCES `mv` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='MV收藏表'; -- ------------------------------ -- 15. 评论表(关联auth服务的user.id、本服务的song.id或mv.id) -- ------------------------------ CREATE TABLE `comment` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `user_id` INT NOT NULL COMMENT '评论用户ID,关联auth服务的user.id', `content_type` TINYINT NOT NULL COMMENT '内容类型:1-歌曲,2-MV', `content_id` INT NOT NULL COMMENT '关联内容ID,根据content_type关联song.id或mv.id', `parent_id` INT DEFAULT NULL COMMENT '父评论ID,用于回复评论,NULL表示顶级评论', `content` TEXT NOT NULL COMMENT '评论内容', `like_count` INT DEFAULT 0 COMMENT '点赞数', `reply_count` INT DEFAULT 0 COMMENT '回复数', `status` TINYINT DEFAULT 1 COMMENT '评论状态:0-已删除,1-正常,2-审核中,3-审核不通过', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 普通索引(保留原逻辑,优化查询效率) INDEX `idx_user_id` (`user_id`), -- 逻辑关联索引,快速查询某用户的所有评论 INDEX `idx_content_type` (`content_type`), -- 快速按内容类型筛选评论 INDEX `idx_content_id` (`content_id`), -- 快速按内容ID筛选评论 INDEX `idx_parent_id` (`parent_id`), -- 快速查询某评论的所有回复 INDEX `idx_create_time` (`create_time`), -- 快速按创建时间排序/筛选评论 -- 复合索引(优化联合查询,比单独索引更高效) INDEX `idx_content_type_id` (`content_type`, `content_id`) -- 便于按内容类型+内容ID批量查询评论 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='评论表(支持歌曲和MV评论)';