CREATE DATABASE IF NOT EXISTS wy_artist DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci; USE wy_artist; -- ------------------------------ -- 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(避免频繁调用auth服务)', `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` TINYINT COMMENT '艺人所属地区(如中国内地、韩国)', `genre` VARCHAR(100) COMMENT '流派风格(多个用逗号分隔,如流行,摇滚,电子)', `company` VARCHAR(100) COMMENT '所属公司/厂牌(如华谊兄弟、SM娱乐)', `introduction` TEXT COMMENT '艺人介绍(10-1000字,用于艺人详情页)', `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. 艺人实名认证表(无跨服务依赖,仅关联本地artist表) -- ------------------------------ 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 '证件号(建议AES加密存储,保护隐私)', `face_auth_status` TINYINT DEFAULT 0 COMMENT '面部识别状态:0-未认证,1-已认证', `auth_status` TINYINT DEFAULT 0 COMMENT '实名认证状态:0-待审核,1-已通过,2-已驳回', `auth_time` DATETIME COMMENT '实名认证通过时间', `auth_result` TEXT 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='艺人实名认证信息表'; -- ------------------------------ -- 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 '站外平台名称(如微博、抖音、B站、Spotify)', `platform_account` VARCHAR(255) NOT NULL COMMENT '平台用户ID/URL/昵称(如微博昵称:XXX)', `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='艺人站外社交平台信息表'; -- ------------------------------ -- 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(已存在的艺人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='音乐人审核申请记录表'; -- ------------------------------ -- 7. 我喜欢的歌手表(关联auth服务的user.id、artist服务的artist.id) -- ------------------------------ 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='我喜欢的歌手表'; DROP TABLE IF EXISTS `share`; CREATE TABLE `share` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '分享ID,主键', `user_id` VARCHAR(64) NOT NULL COMMENT '发表分享的用户ID', `content` TEXT COMMENT '分享正文内容(支持富文本或纯文本)', `jump_urls` TEXT COMMENT '图片跳转', -- 移除 DEFAULT '[]',解决1101错误 `files` JSON COMMENT '图片文件', -- 移除 DEFAULT '[]',解决1101错误 `like_count` INT DEFAULT 0 COMMENT '点赞数', `unlike_count` INT DEFAULT 0 COMMENT '点踩数', `is_forward` BOOLEAN DEFAULT FALSE COMMENT '是否转发', `forward_count` INT DEFAULT 0 COMMENT '转发数', `comment_count` INT DEFAULT 0 COMMENT '评论数', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), INDEX `idx_user_id` (`user_id`), INDEX `idx_created_at` (`created_at`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='分享表'; -- 点赞记录表 CREATE TABLE `share_like_record` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `share_id` BIGINT NOT NULL COMMENT '分享ID,关联share表', `user_id` INT NOT NULL COMMENT '点赞用户ID,关联user表', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '点赞时间', UNIQUE KEY `uk_share_user` (`share_id`, `user_id`), -- 一个用户对一个分享只能点赞一次 INDEX `idx_share_id` (`share_id`), INDEX `idx_user_id` (`user_id`), FOREIGN KEY (`share_id`) REFERENCES `share` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='分享点赞记录表'; -- 踩记录表 CREATE TABLE `share_dislike_record` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `share_id` BIGINT NOT NULL COMMENT '分享ID,关联share表', `user_id` INT NOT NULL COMMENT '点踩用户ID,关联user表', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '点踩时间', UNIQUE KEY `uk_share_user` (`share_id`, `user_id`), -- 一个用户对一个分享只能踩一次 INDEX `idx_share_id` (`share_id`), INDEX `idx_user_id` (`user_id`), FOREIGN KEY (`share_id`) REFERENCES `share` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='分享点踩记录表'; -- 转发记录表 CREATE TABLE `share_forward_record` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `share_id` BIGINT NOT NULL COMMENT '原分享ID,关联share表', `user_id` INT NOT NULL COMMENT '转发用户ID,关联user表', `target_share_id` BIGINT COMMENT '转发后生成的新分享ID(如果转发后用户添加了内容)', `forward_content` TEXT COMMENT '转发时添加的内容', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '转发时间', INDEX `idx_share_id` (`share_id`), INDEX `idx_user_id` (`user_id`), INDEX `idx_target_share_id` (`target_share_id`), FOREIGN KEY (`share_id`) REFERENCES `share` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='分享转发记录表';