-- ======================================================== -- 微音乐平台数据库初始化脚本 -- 创建顺序:按服务依赖关系从基础到复杂 -- 文件:init_database.sql -- ======================================================== -- ======================================================== -- 1. 认证服务数据库 (wy_auth) -- ======================================================== CREATE DATABASE IF NOT EXISTS wy_auth DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci; USE wy_auth; -- ======================================================== -- 1.1 用户基础信息表 -- ======================================================== CREATE TABLE `user` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID', `username` VARCHAR(50) NOT NULL COMMENT '账号(唯一,用于登录)', `name` VARCHAR(50) COMMENT '用户昵称(冗余,兼容PO)', `age` INT COMMENT '用户年龄', `password` VARCHAR(100) NOT NULL COMMENT '登录密码(建议BCrypt加密)', `url` VARCHAR(500) COMMENT '用户头像URL', `vip_level` INT DEFAULT 0 COMMENT 'VIP等级', `vip_status` INT DEFAULT 0 COMMENT 'VIP状态(0-非VIP,1-VIP)', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `last_login_time` DATETIME COMMENT '最后登录时间', `nickname` VARCHAR(50) COMMENT '用户昵称(用于展示)', `wx_unionid` VARCHAR(100) COMMENT '微信unionid', `utype` VARCHAR(20) DEFAULT 'normal' COMMENT '用户类型(normal-普通用户,admin-管理员,artist-艺人)', `status` VARCHAR(20) DEFAULT 'normal' COMMENT '用户状态(normal-正常,forbid-禁用,freeze-冻结)', `phone` VARCHAR(20) COMMENT '手机号(唯一)', UNIQUE KEY `uk_username` (`username`), UNIQUE KEY `uk_phone` (`phone`), UNIQUE KEY `uk_wx_unionid` (`wx_unionid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户基础信息表'; -- ======================================================== -- 2. 艺人服务数据库 (wy_artist) -- ======================================================== CREATE DATABASE IF NOT EXISTS wy_artist DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci; USE wy_artist; -- ======================================================== -- 2.1 艺人基础信息表 -- ======================================================== CREATE TABLE `artist` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `user_id` INT NOT NULL COMMENT '关联auth服务的user.id', `user_username` VARCHAR(50) NOT NULL COMMENT '冗余auth.user.username', `user_phone` VARCHAR(20) COMMENT '冗余auth.user.phone', `artist_name` VARCHAR(100) NOT NULL COMMENT '艺人名', `avatar` VARCHAR(255) COMMENT '艺人头像URL', `header_image` VARCHAR(255) COMMENT '艺人页头图', `gender` TINYINT COMMENT '性别:1-男,2-女,3-团体', `birthday` DATE COMMENT '生日', `region` VARCHAR(50) COMMENT '艺人所属地区', `genre` VARCHAR(100) COMMENT '流派风格', `company` VARCHAR(100) COMMENT '所属公司/厂牌', `introduction` TEXT COMMENT '艺人介绍', `invitation_code` VARCHAR(50) COMMENT '邀请码', `wechat` VARCHAR(50) COMMENT '微信号', `status` TINYINT DEFAULT 0 COMMENT '艺人账号状态:0-待审核,1-已通过,2-已拒绝,3-已冻结', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', UNIQUE KEY `uk_artist_name` (`artist_name`), UNIQUE KEY `uk_user_id` (`user_id`), INDEX `idx_user_id` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='艺人基础信息表'; -- ======================================================== -- 2.2 艺人实名认证表 -- ======================================================== CREATE TABLE `artist_real_auth` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `artist_id` INT NOT NULL COMMENT '关联本服务的artist.id', `real_name` VARCHAR(50) NOT NULL COMMENT '真实姓名', `phone` VARCHAR(20) NOT NULL COMMENT '绑定手机号', `email` VARCHAR(100) NOT NULL COMMENT '邮箱', `nationality` VARCHAR(50) NOT NULL COMMENT '国籍/地区', `id_card` VARCHAR(100) NOT NULL COMMENT '证件号', `face_auth_status` TINYINT DEFAULT 0 COMMENT '面部识别状态:0-未认证,1-已认证', `auth_status` TINYINT DEFAULT 0 COMMENT '实名认证状态:0-待审核,1-已通过,2-已驳回', `auth_time` DATETIME COMMENT '实名认证通过时间', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', FOREIGN KEY (`artist_id`) REFERENCES `artist` (`id`) ON DELETE CASCADE, UNIQUE KEY `uk_artist_auth` (`artist_id`), UNIQUE KEY `uk_id_card` (`id_card`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='艺人实名认证信息表'; -- ======================================================== -- 2.3 艺人站外社交信息表 -- ======================================================== CREATE TABLE `artist_external_info` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `artist_id` INT NOT NULL COMMENT '关联本服务的artist.id', `platform_name` VARCHAR(50) NOT NULL COMMENT '站外平台名称', `platform_account` VARCHAR(255) NOT NULL COMMENT '平台用户ID/URL/昵称', `fans_count` BIGINT DEFAULT 0 COMMENT '平台粉丝数', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', FOREIGN KEY (`artist_id`) REFERENCES `artist` (`id`) ON DELETE CASCADE, UNIQUE KEY `uk_artist_platform` (`artist_id`, `platform_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='艺人站外社交平台信息表'; -- ======================================================== -- 2.4 音乐人审核申请表 -- ======================================================== CREATE TABLE `artist_audit_record` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `user_id` INT NOT NULL COMMENT '关联auth服务的user.id', `user_username` VARCHAR(50) NOT NULL COMMENT '冗余auth.user.username', `artist_id` INT COMMENT '关联本服务的artist.id', `apply_type` TINYINT DEFAULT 1 COMMENT '申请类型:1-新注册,2-信息修改,3-重新申请', `apply_reason` TEXT COMMENT '申请原因', `apply_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '申请时间', `audit_status` TINYINT DEFAULT 0 COMMENT '审核状态:0-待审核,1-已通过,2-已驳回', `audit_result` TEXT COMMENT '审核结果', `reject_reason` TEXT COMMENT '驳回原因', `audit_time` DATETIME COMMENT '审核时间', `audit_user_id` INT COMMENT '关联auth服务的user.id', `audit_username` VARCHAR(50) COMMENT '冗余auth.user.username', `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_artist_id` (`artist_id`), INDEX `idx_apply_time` (`apply_time`), INDEX `idx_audit_status` (`audit_status`), INDEX `idx_audit_user_id` (`audit_user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='音乐人审核申请记录表'; -- ======================================================== -- 3. 内容服务数据库 (wy_content) -- ======================================================== CREATE DATABASE IF NOT EXISTS wy_content DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci; USE wy_content; -- ======================================================== -- 3.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', `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-已上架,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 '删除时间', INDEX `idx_album_name` (`album_name`), INDEX `idx_artist_id` (`artist_id`), INDEX `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='专辑表'; -- ======================================================== -- 3.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', `duration` INT COMMENT '时长(秒)', `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 '删除时间', 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.3 歌词表 -- ======================================================== CREATE TABLE `lyric` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `song_id` INT NOT NULL COMMENT '关联本服务的song.id', `lyrics` TEXT NOT NULL COMMENT 'LRC格式歌词文本', `language` VARCHAR(20) DEFAULT 'zh' COMMENT '歌词语言', `version` VARCHAR(50) COMMENT '歌词版本', `upload_user_id` INT NOT NULL COMMENT '上传用户ID,关联auth服务的user.id', `status` TINYINT DEFAULT 0 COMMENT '状态:0-待审核,1-已通过,2-已驳回', `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='歌词表(多版本支持)'; -- ======================================================== -- 3.4 歌单表 -- ======================================================== 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` TINYINT DEFAULT 0 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='歌单表'; -- ======================================================== -- 3.5 歌单-歌曲关联表 -- ======================================================== 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='歌单-歌曲关联表'; -- ======================================================== -- 3.6 歌曲推广表 -- ======================================================== 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='歌曲推广表'; -- ======================================================== -- 3.7 推广效果统计表 -- ======================================================== 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='推广效果统计表'; -- ======================================================== -- 3.8 每日推荐表 -- ======================================================== 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='每日推荐表'; -- ======================================================== -- 3.9 我喜欢的音乐表 -- ======================================================== 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='我喜欢的音乐表'; -- ======================================================== -- 3.10 我喜欢的歌手表 -- ======================================================== CREATE TABLE `user_favorite_artist` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `user_id` INT NOT NULL COMMENT '关联auth服务的user.id', `artist_id` INT NOT NULL COMMENT '关联artist服务的artist.id', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '关注时间', UNIQUE KEY `uk_user_artist` (`user_id`, `artist_id`), INDEX `idx_user_id` (`user_id`), INDEX `idx_artist_id` (`artist_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='我喜欢的歌手表'; -- ======================================================== -- 3.11 我关注的用户表 -- ======================================================== 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='我关注的用户表'; -- ======================================================== -- 3.12 我喜欢的歌单表 -- ======================================================== 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='我喜欢的歌单表'; -- ======================================================== -- 4. 媒体服务数据库 (wy_media) -- ======================================================== CREATE DATABASE IF NOT EXISTS wy_media DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci; USE wy_media; -- ======================================================== -- 4.1 媒体文件信息表 -- ======================================================== CREATE TABLE `media_file` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `original_name` VARCHAR(255) NOT NULL COMMENT '原始文件名', `file_name` VARCHAR(255) NOT NULL COMMENT '存储文件名(系统生成的唯一文件名)', `file_type` VARCHAR(20) NOT NULL COMMENT '文件类型:image、audio、video', `file_size` BIGINT COMMENT '文件大小(字节)', `bucket_name` VARCHAR(100) NOT NULL COMMENT '存储桶名称', `file_url` VARCHAR(500) NOT NULL COMMENT '文件访问URL', `storage_type` VARCHAR(20) DEFAULT 'oss' COMMENT '存储类型(oss、local、minio等)', `status` TINYINT DEFAULT 0 COMMENT '文件状态:0-正常,1-已删除(逻辑删除)', `md5` VARCHAR(32) COMMENT '文件MD5值', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX `idx_file_type` (`file_type`), INDEX `idx_bucket_name` (`bucket_name`), INDEX `idx_create_time` (`create_time`), INDEX `idx_md5` (`md5`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='媒体文件信息表'; -- ======================================================== -- 4.2 艺人媒体文件历史记录表 -- ======================================================== CREATE TABLE `artist_media_history` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `artist_id` INT NOT NULL COMMENT '关联artist服务的artist.id', `media_type` VARCHAR(20) NOT NULL COMMENT '媒体类型: avatar、header_image等', `media_file_id` BIGINT NOT NULL COMMENT '关联本服务的media_file.id', `is_current` TINYINT DEFAULT 0 COMMENT '是否为当前使用版本:0-否,1-是', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', FOREIGN KEY (`media_file_id`) REFERENCES `media_file` (`id`) ON DELETE RESTRICT, UNIQUE KEY `uk_artist_media_current` (`artist_id`, `media_type`, `is_current`), INDEX `idx_artist_id` (`artist_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='艺人媒体文件历史记录表'; -- ======================================================== -- 5. 订单服务数据库 (wy_order) -- ======================================================== CREATE DATABASE IF NOT EXISTS wy_order DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci; USE wy_order; -- ======================================================== -- 5.1 商品分类表 -- ======================================================== CREATE TABLE `product_category` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(100) NOT NULL COMMENT '分类名称', `parent_id` INT COMMENT '父分类ID', `sort` INT DEFAULT 0 COMMENT '排序权重', `status` TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', FOREIGN KEY (`parent_id`) REFERENCES `product_category` (`id`) ON DELETE SET NULL, INDEX `idx_parent_id` (`parent_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品分类表'; -- ======================================================== -- 5.2 商品表 -- ======================================================== CREATE TABLE `product` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `category_id` INT NOT NULL COMMENT '关联本服务的product_category.id', `name` VARCHAR(255) NOT NULL COMMENT '商品名称', `cover_url` VARCHAR(500) COMMENT '商品封面URL', `description` TEXT COMMENT '商品描述', `price` DECIMAL(10,2) NOT NULL COMMENT '售价', `original_price` DECIMAL(10,2) COMMENT '原价', `stock` INT NOT NULL DEFAULT 0 COMMENT '库存(-1表示无限)', `product_type` TINYINT NOT NULL COMMENT '类型:1-数字商品,2-实体商品', `artist_id` INT COMMENT '关联artist服务的artist.id', `album_id` INT COMMENT '关联content服务的album.id', `song_id` INT COMMENT '关联content服务的song.id', `status` TINYINT DEFAULT 1 COMMENT '状态:0-下架,1-上架', `sales_count` INT DEFAULT 0 COMMENT '销量', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', FOREIGN KEY (`category_id`) REFERENCES `product_category` (`id`) ON DELETE CASCADE, INDEX `idx_product_name` (`name`), INDEX `idx_product_type` (`product_type`), INDEX `idx_status` (`status`), INDEX `idx_artist_id` (`artist_id`), INDEX `idx_album_id` (`album_id`), INDEX `idx_song_id` (`song_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表'; -- ======================================================== -- 5.3 订单表 -- ======================================================== CREATE TABLE `order` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `order_no` VARCHAR(50) NOT NULL COMMENT '订单编号', `user_id` INT NOT NULL COMMENT '关联auth服务的user.id', `total_amount` DECIMAL(10,2) NOT NULL COMMENT '订单总金额', `pay_amount` DECIMAL(10,2) NOT NULL COMMENT '实付金额', `discount_amount` DECIMAL(10,2) DEFAULT 0.00 COMMENT '优惠金额', `pay_type` TINYINT COMMENT '支付方式:1-微信,2-支付宝', `status` TINYINT NOT NULL COMMENT '状态:0-待支付,1-已支付,2-已取消,3-已退款,4-已完成', `pay_time` DATETIME COMMENT '支付时间', `cancel_time` DATETIME COMMENT '取消时间', `finish_time` DATETIME COMMENT '完成时间', `receive_name` VARCHAR(100) COMMENT '收货人姓名', `receive_phone` VARCHAR(20) COMMENT '收货人电话', `receive_address` TEXT COMMENT '收货地址', `note` TEXT COMMENT '订单备注', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', UNIQUE KEY `uk_order_no` (`order_no`), INDEX `idx_user_id` (`user_id`), INDEX `idx_status` (`status`), INDEX `idx_create_time` (`create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表'; -- ======================================================== -- 5.4 订单项表 -- ======================================================== CREATE TABLE `order_item` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `order_id` BIGINT NOT NULL COMMENT '关联本服务的order.id', `product_id` INT NULL COMMENT '关联本服务的product.id', `product_name` VARCHAR(255) NOT NULL COMMENT '商品名称快照', `product_cover` VARCHAR(500) COMMENT '商品封面快照', `product_price` DECIMAL(10,2) NOT NULL COMMENT '下单时单价', `quantity` INT NOT NULL DEFAULT 1 COMMENT '购买数量', `sub_amount` DECIMAL(10,2) NOT NULL COMMENT '小计金额', `digital_code` VARCHAR(100) COMMENT '数字商品兑换码', `digital_code_status` TINYINT DEFAULT 0 COMMENT '兑换码状态:0-未使用,1-已使用', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', FOREIGN KEY (`order_id`) REFERENCES `order` (`id`) ON DELETE CASCADE, FOREIGN KEY (`product_id`) REFERENCES `product` (`id`) ON DELETE SET NULL, INDEX `idx_order_id` (`order_id`), INDEX `idx_product_id` (`product_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单项表'; -- ======================================================== -- 数据库初始化完成 -- ======================================================== SELECT '数据库初始化完成!' AS '初始化结果';