235 lines
9.6 KiB
Markdown
235 lines
9.6 KiB
Markdown
# 数据库设计文档(用户 / 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');
|
||
```
|