# 数据库设计文档(用户 / Skill / 积分模块) ## 一、用户模块 ### 1.1 users 表 ```sql CREATE TABLE users ( id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID', phone VARCHAR(20) UNIQUE NOT NULL COMMENT '手机号', password_hash VARCHAR(255) NOT NULL COMMENT '密码哈希(BCrypt)', nickname VARCHAR(100) COMMENT '昵称', avatar_url VARCHAR(500) COMMENT '头像URL(腾讯云COS)', status ENUM('active', 'inactive', 'banned') DEFAULT 'active' COMMENT '状态', member_level ENUM('normal', 'silver', 'gold', 'diamond') DEFAULT 'normal' COMMENT '会员等级', growth_value INT DEFAULT 0 COMMENT '成长值', ban_reason VARCHAR(255) COMMENT '封禁原因', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, deleted_at TIMESTAMP NULL COMMENT '软删除时间', INDEX idx_phone (phone), INDEX idx_status (status), INDEX idx_created_at (created_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表'; ``` > **变更说明**:新增 `ban_reason` 字段,用于管理员封禁用户时记录原因。 ### 1.2 user_profiles 表 ```sql CREATE TABLE user_profiles ( id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '资料ID', user_id BIGINT NOT NULL UNIQUE COMMENT '用户ID', real_name VARCHAR(100) COMMENT '真实姓名', id_card VARCHAR(50) COMMENT '身份证号(加密)', gender ENUM('male', 'female', 'unknown') DEFAULT 'unknown', birthday DATE, city VARCHAR(100), bio TEXT COMMENT '个人简介', auth_status ENUM('none', 'pending', 'approved', 'rejected') DEFAULT 'none' COMMENT '实名认证', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id), INDEX idx_user_id (user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户详细资料表'; ``` ### 1.3 user_auth 表 ```sql CREATE TABLE user_auth ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT NOT NULL COMMENT '用户ID', auth_type ENUM('wechat', 'alipay', 'email') NOT NULL COMMENT '授权类型', auth_id VARCHAR(255) NOT NULL COMMENT '第三方唯一ID', auth_name VARCHAR(100) COMMENT '第三方昵称', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY unique_auth (auth_type, auth_id), FOREIGN KEY (user_id) REFERENCES users(id), INDEX idx_user_id (user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='第三方授权表'; ``` ## 二、Skill模块 ### 2.1 skill_categories 表 ```sql CREATE TABLE skill_categories ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL UNIQUE COMMENT '分类名称', parent_id INT DEFAULT NULL COMMENT '父分类ID(NULL=一级)', icon_url VARCHAR(500) COMMENT '图标(腾讯云COS)', sort_order INT DEFAULT 0 COMMENT '排序', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, INDEX idx_parent_id (parent_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Skill分类表'; INSERT INTO skill_categories (name, parent_id, sort_order) VALUES ('办公自动化', NULL, 1), ('数据处理', NULL, 2), ('客服助手', NULL, 3), ('内容创作', NULL, 4), ('营销推广', NULL, 5), ('其他', NULL, 99); ``` ### 2.2 skills 表 ```sql CREATE TABLE skills ( id BIGINT PRIMARY KEY AUTO_INCREMENT, creator_id BIGINT NOT NULL COMMENT '创建者ID', name VARCHAR(200) NOT NULL COMMENT 'Skill名称', description TEXT COMMENT '详细描述', cover_image_url VARCHAR(500) COMMENT '封面图(腾讯云COS)', category_id INT NOT NULL COMMENT '分类ID', price DECIMAL(10, 2) DEFAULT 0.00 COMMENT '价格(元)', is_free BOOLEAN DEFAULT FALSE COMMENT '是否免费', status ENUM('draft','pending','approved','rejected','offline') DEFAULT 'draft' COMMENT '状态', reject_reason VARCHAR(500) COMMENT '审核拒绝原因', auditor_id BIGINT COMMENT '审核人ID', audited_at TIMESTAMP NULL COMMENT '审核时间', download_count INT DEFAULT 0 COMMENT '下载次数', rating DECIMAL(3, 2) DEFAULT 0.00 COMMENT '平均评分', rating_count INT DEFAULT 0 COMMENT '评分人数', version VARCHAR(50) COMMENT '版本号', file_size BIGINT COMMENT '文件大小(字节)', file_url VARCHAR(500) COMMENT '文件(腾讯云COS)', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, deleted_at TIMESTAMP NULL COMMENT '软删除', FOREIGN KEY (creator_id) REFERENCES users(id), FOREIGN KEY (category_id) REFERENCES skill_categories(id), INDEX idx_creator_id (creator_id), INDEX idx_category_id (category_id), INDEX idx_status (status), INDEX idx_is_free (is_free), INDEX idx_created_at (created_at), INDEX idx_download_count (download_count), FULLTEXT INDEX ft_search (name, description) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Skill表'; ``` > **变更说明**:新增 `auditor_id`、`audited_at` 字段,用于管理后台记录审核操作人和审核时间。 ### 2.3 skill_reviews 表 ```sql CREATE TABLE skill_reviews ( id BIGINT PRIMARY KEY AUTO_INCREMENT, skill_id BIGINT NOT NULL, user_id BIGINT NOT NULL, order_id BIGINT COMMENT '关联订单ID', rating INT NOT NULL COMMENT '评分(1-5)', content TEXT COMMENT '评价内容', images JSON COMMENT '图片URL数组(腾讯云COS)', helpful_count INT DEFAULT 0 COMMENT '有帮助人数', status ENUM('pending','approved','rejected') DEFAULT 'approved', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (skill_id) REFERENCES skills(id), FOREIGN KEY (user_id) REFERENCES users(id), INDEX idx_skill_id (skill_id), INDEX idx_user_id (user_id), CONSTRAINT chk_rating CHECK (rating >= 1 AND rating <= 5) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Skill评价表'; ``` ### 2.4 skill_downloads 表 ```sql CREATE TABLE skill_downloads ( id BIGINT PRIMARY KEY AUTO_INCREMENT, skill_id BIGINT NOT NULL, user_id BIGINT NOT NULL, order_id BIGINT COMMENT '关联订单(免费为NULL)', download_type ENUM('free','paid','points') NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (skill_id) REFERENCES skills(id), FOREIGN KEY (user_id) REFERENCES users(id), UNIQUE KEY uk_user_skill (user_id, skill_id), INDEX idx_skill_id (skill_id), INDEX idx_user_id (user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Skill获取记录表'; ``` ## 三、积分模块 ### 3.1 user_points 表 ```sql CREATE TABLE user_points ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT NOT NULL UNIQUE, available_points INT DEFAULT 0 COMMENT '可用积分', frozen_points INT DEFAULT 0 COMMENT '冻结积分', total_earned INT DEFAULT 0 COMMENT '累计获取', total_consumed INT DEFAULT 0 COMMENT '累计消耗', last_sign_in_date DATE COMMENT '最后签到日期', sign_in_streak INT DEFAULT 0 COMMENT '连续签到天数', updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id), INDEX idx_user_id (user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户积分账户表'; ``` ### 3.2 points_records 表 ```sql CREATE TABLE points_records ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT NOT NULL, points_type ENUM('earn','consume','freeze','unfreeze','admin_correct') NOT NULL COMMENT '变动类型', source ENUM( 'register','sign_in','invite','invited','join_community', 'recharge','skill_purchase','review','activity', 'admin_add','admin_deduct','admin_correct','refund' ) NOT NULL COMMENT '来源', amount INT NOT NULL COMMENT '变动量(正:获得 负:消耗)', balance INT NOT NULL COMMENT '变动后余额', description VARCHAR(255) COMMENT '描述', related_id BIGINT COMMENT '关联业务ID', related_type VARCHAR(50) COMMENT '关联业务类型', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id), INDEX idx_user_id (user_id), INDEX idx_source (source), INDEX idx_created_at (created_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='积分流水表'; ``` > **变更说明**:`points_type` 新增 `admin_correct`;`source` 新增 `invited`(被邀请奖励)、`admin_add`、`admin_deduct`、`admin_correct`、`refund`,与代码中的实际使用对齐。 ### 3.3 points_rules 表 ```sql CREATE TABLE points_rules ( id INT PRIMARY KEY AUTO_INCREMENT, rule_name VARCHAR(100) NOT NULL COMMENT '规则名称', source ENUM('register','sign_in','invite','join_community','recharge','review','activity') NOT NULL UNIQUE, points_amount INT NOT NULL COMMENT '积分数量', frequency_limit INT COMMENT '周期内上限(NULL不限)', frequency_period ENUM('daily','weekly','monthly','unlimited') DEFAULT 'unlimited', enabled BOOLEAN DEFAULT TRUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='积分规则表'; INSERT INTO points_rules (rule_name, source, points_amount, frequency_limit, frequency_period) VALUES ('新用户注册', 'register', 300, 1, 'unlimited'), ('每日签到', 'sign_in', 10, 1, 'daily'), ('邀请好友', 'invite', 100, NULL, 'unlimited'), ('加入社群', 'join_community', 50, 1, 'unlimited'), ('发表评价', 'review', 5, 3, 'daily'); ```