表功能增加

This commit is contained in:
2025-10-15 10:39:51 +08:00
parent 9244275a51
commit 88976d7c47
16 changed files with 2815 additions and 0 deletions

View File

@@ -0,0 +1,290 @@
# 校园思政新闻平台 - ER关系图
## 核心模块关系图
```mermaid
erDiagram
%% 用户体系
tb_sys_user ||--|| tb_sys_user_info : "1对1"
tb_sys_user ||--o{ tb_sys_login_log : "1对多"
tb_sys_user ||--o{ tb_sys_user_dept_role : "1对多"
%% 权限体系
tb_sys_dept ||--o{ tb_sys_dept : "父子关系"
tb_sys_dept ||--o{ tb_sys_dept_role : "1对多"
tb_sys_role ||--o{ tb_sys_dept_role : "1对多"
tb_sys_role ||--o{ tb_sys_user_dept_role : "1对多"
tb_sys_role ||--o{ tb_sys_role_permission : "1对多"
tb_sys_permission ||--o{ tb_sys_role_permission : "1对多"
tb_sys_permission ||--o{ tb_sys_menu_permission : "1对多"
tb_sys_menu ||--o{ tb_sys_menu : "父子关系"
tb_sys_menu ||--o{ tb_sys_menu_permission : "1对多"
%% 资源体系
tb_resource_category ||--o{ tb_resource_category : "父子关系"
tb_resource_category ||--o{ tb_resource : "1对多"
tb_resource ||--o{ tb_resource_tag : "1对多"
tb_resource ||--o| tb_resource_recommend : "1对1"
tb_resource ||--o| tb_banner : "1对1"
tb_tag ||--o{ tb_resource_tag : "1对多"
%% 课程体系
tb_course ||--o{ tb_course_chapter : "1对多"
tb_course ||--o{ tb_course_tag : "1对多"
tb_course ||--o{ tb_course_dept : "1对多"
tb_tag ||--o{ tb_course_tag : "1对多"
tb_sys_dept ||--o{ tb_course_dept : "1对多"
%% 学习体系
tb_learning_task ||--o{ tb_task_resource : "1对多"
tb_learning_task ||--o{ tb_task_course : "1对多"
tb_learning_task ||--o{ tb_task_user : "1对多"
tb_resource ||--o{ tb_task_resource : "1对多"
tb_course ||--o{ tb_task_course : "1对多"
tb_sys_user ||--o{ tb_task_user : "1对多"
tb_sys_user ||--o{ tb_learning_record : "1对多"
tb_sys_user ||--o{ tb_learning_statistics : "1对多"
%% 个人中心
tb_sys_user ||--o{ tb_user_collection : "1对多"
tb_sys_user ||--|| tb_user_points : "1对1"
tb_sys_user ||--o{ tb_points_record : "1对多"
tb_sys_user ||--o{ tb_user_achievement : "1对多"
tb_sys_user ||--o{ tb_user_browse_record : "1对多"
tb_achievement ||--o{ tb_user_achievement : "1对多"
%% 智能体
tb_sys_user ||--o{ tb_ai_conversation : "1对多"
tb_sys_user ||--o{ tb_ai_upload_file : "1对多"
tb_sys_user ||--o{ tb_ai_usage_statistics : "1对多"
tb_ai_conversation ||--o{ tb_ai_message : "1对多"
%% 系统
tb_sys_user ||--o{ tb_sys_operation_log : "1对多"
tb_sys_user ||--o{ tb_sys_notification : "1对多"
```
## 用户权限体系详细关系
```mermaid
graph TB
User[用户 tb_sys_user]
UserInfo[用户信息 tb_sys_user_info]
UDR[用户部门角色 tb_sys_user_dept_role]
Dept[部门 tb_sys_dept]
Role[角色 tb_sys_role]
RolePerm[角色权限 tb_sys_role_permission]
Perm[权限 tb_sys_permission]
MenuPerm[菜单权限 tb_sys_menu_permission]
Menu[菜单 tb_sys_menu]
User -->|1:1| UserInfo
User -->|1:N| UDR
Dept -->|1:N| UDR
Role -->|1:N| UDR
Role -->|1:N| RolePerm
Perm -->|1:N| RolePerm
Perm -->|1:N| MenuPerm
Menu -->|1:N| MenuPerm
style User fill:#e1f5ff
style Role fill:#fff4e1
style Perm fill:#ffe1f5
style Menu fill:#e1ffe1
```
## 资源课程学习体系
```mermaid
graph TB
Resource[资源 tb_resource]
Course[课程 tb_course]
Chapter[章节 tb_course_chapter]
Category[分类 tb_resource_category]
Tag[标签 tb_tag]
Task[学习任务 tb_learning_task]
TaskUser[任务用户 tb_task_user]
User[用户 tb_sys_user]
Record[学习记录 tb_learning_record]
Category -->|1:N| Resource
Resource -->|M:N| Tag
Course -->|M:N| Tag
Course -->|1:N| Chapter
Task -->|M:N| Resource
Task -->|M:N| Course
Task -->|M:N| User
Task --> TaskUser
User -->|1:N| Record
Resource -.->|记录| Record
Course -.->|记录| Record
style Resource fill:#e1f5ff
style Course fill:#ffe1f5
style Task fill:#fff4e1
style User fill:#e1ffe1
```
## 智能体对话体系
```mermaid
graph TB
User[用户 tb_sys_user]
Config[AI配置 tb_ai_agent_config]
Knowledge[知识库 tb_ai_knowledge]
Conversation[对话会话 tb_ai_conversation]
Message[对话消息 tb_ai_message]
File[上传文件 tb_ai_upload_file]
Stats[使用统计 tb_ai_usage_statistics]
User -->|1:N| Conversation
User -->|1:N| File
User -->|1:N| Stats
Conversation -->|1:N| Message
File -.->|关联| Message
Knowledge -.->|引用| Message
Config -.->|配置| Message
style User fill:#e1f5ff
style Conversation fill:#ffe1f5
style Knowledge fill:#fff4e1
style Config fill:#e1ffe1
```
## 个人中心体系
```mermaid
graph TB
User[用户 tb_sys_user]
Collection[收藏 tb_user_collection]
Points[积分 tb_user_points]
PointsRecord[积分记录 tb_points_record]
Achievement[成就 tb_achievement]
UserAchievement[用户成就 tb_user_achievement]
Browse[浏览记录 tb_user_browse_record]
Resource[资源]
Course[课程]
User -->|1:N| Collection
User -->|1:1| Points
User -->|1:N| PointsRecord
User -->|1:N| UserAchievement
User -->|1:N| Browse
Achievement -->|1:N| UserAchievement
Resource -.->|收藏| Collection
Course -.->|收藏| Collection
Resource -.->|浏览| Browse
Course -.->|浏览| Browse
style User fill:#e1f5ff
style Points fill:#ffe1f5
style Achievement fill:#fff4e1
```
## 表关系类型说明
### 1对1关系 (1:1)
- `tb_sys_user``tb_sys_user_info`: 用户与用户信息
- `tb_sys_user``tb_user_points`: 用户与积分
- `tb_resource``tb_resource_recommend`: 资源与推荐(可选)
- `tb_resource``tb_banner`: 资源与Banner可选
### 1对多关系 (1:N)
- `tb_sys_user``tb_sys_login_log`: 用户的登录记录
- `tb_sys_dept``tb_sys_dept`: 部门的子部门
- `tb_resource_category``tb_resource`: 分类下的资源
- `tb_course``tb_course_chapter`: 课程的章节
- `tb_ai_conversation``tb_ai_message`: 会话的消息
### 多对多关系 (M:N)
- `tb_sys_user``tb_sys_role`: 通过 `tb_sys_user_dept_role`
- `tb_sys_role``tb_sys_permission`: 通过 `tb_sys_role_permission`
- `tb_resource``tb_tag`: 通过 `tb_resource_tag`
- `tb_course``tb_tag`: 通过 `tb_course_tag`
- `tb_learning_task``tb_resource`: 通过 `tb_task_resource`
- `tb_learning_task``tb_course`: 通过 `tb_task_course`
- `tb_learning_task``tb_sys_user`: 通过 `tb_task_user`
- `tb_sys_user``tb_achievement`: 通过 `tb_user_achievement`
## 核心业务流程关系
### 用户学习流程
1. 用户登录 → `tb_sys_user` + `tb_sys_login_log`
2. 查看任务 → `tb_learning_task` + `tb_task_user`
3. 学习资源 → `tb_resource` / `tb_course`
4. 记录学习 → `tb_learning_record`
5. 更新进度 → `tb_task_user` + `tb_learning_statistics`
6. 获得积分 → `tb_user_points` + `tb_points_record`
7. 解锁成就 → `tb_user_achievement`
### 资源管理流程
1. 数据采集 → `tb_data_collection_config` + `tb_data_collection_log`
2. 创建资源 → `tb_resource`
3. 设置分类 → `tb_resource_category`
4. 添加标签 → `tb_tag` + `tb_resource_tag`
5. 推荐资源 → `tb_resource_recommend`
6. 设置Banner → `tb_banner`
7. 记录操作 → `tb_sys_operation_log`
### 智能体交互流程
1. 创建会话 → `tb_ai_conversation`
2. 发送消息 → `tb_ai_message`
3. 上传文件 → `tb_ai_upload_file`
4. 检索知识库 → `tb_ai_knowledge`
5. 生成回复 → `tb_ai_message`
6. 记录统计 → `tb_ai_usage_statistics`
## 数据流向图
```mermaid
flowchart LR
A[用户操作] --> B{操作类型}
B -->|学习| C[学习记录]
B -->|浏览| D[浏览记录]
B -->|收藏| E[收藏记录]
B -->|对话| F[对话记录]
C --> G[学习统计]
D --> H[访问统计]
C --> I[积分系统]
I --> J[成就系统]
F --> K[AI统计]
G --> L[数据大屏]
H --> L
K --> L
style A fill:#e1f5ff
style L fill:#ffe1e1
```
## 性能优化关键点
1. **高频查询表**
- `tb_sys_user`: 用户信息(添加缓存)
- `tb_resource`: 资源列表(分页+缓存)
- `tb_course`: 课程列表(分页+缓存)
2. **大数据量表**
- `tb_learning_record`: 学习记录(分表+归档)
- `tb_sys_operation_log`: 操作日志(分表+归档)
- `tb_user_browse_record`: 浏览记录(分表+归档)
- `tb_ai_message`: 对话消息(分表+归档)
3. **实时统计表**
- `tb_learning_statistics`: 预聚合统计
- `tb_sys_visit_statistics`: 预聚合统计
- `tb_ai_usage_statistics`: 预聚合统计
4. **关联查询优化**
- 用户权限查询:缓存权限信息
- 任务详情查询:适当冗余字段
- 资源推荐查询:使用物化视图

View File

@@ -0,0 +1,242 @@
# 校园思政新闻平台数据库表结构说明
## 数据库初始化顺序
按照以下顺序执行SQL文件
1. `createDB.sql` - 创建数据库
2. `createTableUser.sql` - 创建用户相关表
3. `createTablePermission.sql` - 创建权限相关表
4. `createTablePermissionControl.sql` - **创建统一资源权限控制表**
5. `createTableResource.sql` - 创建资源管理相关表
6. `createTableCourse.sql` - 创建课程管理相关表
7. `createTableLearning.sql` - 创建学习管理相关表
8. `createTableUserCenter.sql` - 创建个人中心相关表
9. `createTableAI.sql` - 创建智能体相关表
10. `createTableSystem.sql` - 创建系统配置和日志相关表
## 表结构概览
### 1. 用户管理模块 (createTableUser.sql)
- `tb_sys_user` - 用户表
- `tb_sys_user_info` - 用户信息表
- `tb_sys_login_log` - 登录日志表
### 2. 权限管理模块 (createTablePermission.sql)
- `tb_sys_dept` - 部门表
- `tb_sys_role` - 角色表
- `tb_sys_dept_role` - 部门-角色关联表
- `tb_sys_user_dept_role` - 用户-部门-角色关联表
- `tb_sys_permission` - 权限表
- `tb_sys_role_permission` - 角色-权限关联表
- `tb_sys_menu` - 菜单表
- `tb_sys_menu_permission` - 菜单-权限关联表
### 3. 资源管理模块 (createTableResource.sql)
- `tb_resource` - 资源/新闻表
- `tb_resource_category` - 资源分类表
- 默认分类:党史学习、领导讲话、政策解读、红色经典、专题报告、思政案例
- `tb_banner` - Banner轮播图表
- `tb_resource_recommend` - 资源推荐表TOP资源
- `tb_tag` - 标签表
- `tb_resource_tag` - 资源-标签关联表
- `tb_data_collection_config` - 数据采集配置表
- `tb_data_collection_log` - 数据采集记录表
### 4. 课程管理模块 (createTableCourse.sql)
- `tb_course` - 课程表
- `tb_course_chapter` - 课程章节表
- `tb_course_tag` - 课程-标签关联表
- `tb_course_dept` - 课程-部门权限表
### 5. 学习管理模块 (createTableLearning.sql)
- `tb_learning_task` - 学习计划/任务表
- `tb_task_resource` - 任务-资源关联表
- `tb_task_course` - 任务-课程关联表
- `tb_task_user` - 任务-用户关联表(任务接收人员)
- `tb_learning_record` - 学习记录表
- `tb_learning_statistics` - 学习统计表(按天统计)
### 6. 个人中心模块 (createTableUserCenter.sql)
- `tb_user_collection` - 用户收藏表
- `tb_achievement` - 成就表
- `tb_user_achievement` - 用户-成就关联表
- `tb_user_points` - 用户积分表
- `tb_points_record` - 积分记录表
- `tb_user_browse_record` - 用户浏览记录表
### 7. 智能体模块 (createTableAI.sql)
- `tb_ai_agent_config` - 智能体配置表
- `tb_ai_knowledge` - 知识库表
- `tb_ai_conversation` - 对话会话表
- `tb_ai_message` - 对话消息表
- `tb_ai_upload_file` - 上传文件表
- `tb_ai_usage_statistics` - AI使用统计表
### 8. 系统配置和日志模块 (createTableSystem.sql)
- `tb_sys_operation_log` - 操作日志表
- `tb_sys_config` - 系统配置表
- `tb_sys_visit_statistics` - 系统访问统计表
- `tb_sys_notification` - 系统通知表
- `tb_sys_file` - 文件上传记录表
- `tb_sys_dict_type` - 数据字典类型表
- `tb_sys_dict_data` - 数据字典详情表
## 表关系说明
### 核心关系
1. **用户体系**
- 用户 → 用户信息1对1
- 用户 → 部门-角色(多对多)
- 角色 → 权限(多对多)
- 菜单 → 权限(多对多)
2. **资源体系**
- 资源 → 分类多对1
- 资源 → 标签(多对多)
- 资源 → 推荐1对1
- 资源 → Banner1对1
3. **课程体系**
- 课程 → 章节1对多
- 课程 → 标签(多对多)
- 课程 → 部门权限(多对多)
4. **学习体系**
- 任务 → 资源/课程(多对多)
- 任务 → 用户(多对多)
- 用户 → 学习记录1对多
- 用户 → 学习统计1对多
5. **个人中心**
- 用户 → 收藏1对多
- 用户 → 成就(多对多)
- 用户 → 积分1对1
- 用户 → 浏览记录1对多
6. **智能体**
- 用户 → 对话会话1对多
- 会话 → 消息1对多
- 用户 → 上传文件1对多
- 知识库(独立)
## 数据字典
### 通用状态码
- **deleted**: 0-未删除, 1-已删除
- **status**: 根据业务模块有不同含义,具体见各表注释
### 资源相关
- **resource.status**: 0-草稿, 1-已发布, 2-下架
- **link_type**: 1-资源, 2-课程, 3-外部链接
### 课程相关
- **course.status**: 0-未上线, 1-已上线, 2-已下架
- **permission_type**: 0-公开, 1-指定部门
### 学习相关
- **task.status**: 0-草稿, 1-进行中, 2-已结束
- **task_user.status**: 0-未完成, 1-已完成
- **resource_type**: 1-资源, 2-课程, 3-章节
### 个人中心相关
- **collection_type**: 1-资源, 2-课程
- **achievement.type**: 1-勋章, 2-等级
- **condition_type**: 1-学习时长, 2-资源数量, 3-课程数量, 4-连续学习天数
- **points_record.type**: 1-获得, 2-消费
- **points_record.source_type**: 1-学习资源, 2-学习课程, 3-完成任务, 4-获得成就
### 智能体相关
- **ai_knowledge.source_type**: 1-手动添加, 2-文件导入, 3-资源同步
- **ai_message.role**: user-用户, assistant-助手, system-系统
- **ai_upload_file.status**: 0-处理中, 1-已完成, 2-失败
### 系统相关
- **menu.type**: 0-目录, 1-菜单, 2-按钮
- **notification.type**: 1-系统通知, 2-任务通知, 3-成就通知
- **config_type**: string-字符串, number-数字, boolean-布尔, json-JSON对象
## 索引说明
所有表都包含以下基本索引:
- 主键索引id
- 唯一键索引如user_id、role_id等业务唯一标识
- 外键关联索引
- 时间字段索引create_time、update_time等
- 状态字段索引status、deleted等
- 常用查询字段索引
## 字段说明
### 通用字段
所有表都包含以下通用字段:
- `id`: 主键IDVARCHAR(50)
- `creator`: 创建者ID
- `updater`: 更新者ID
- `create_time`: 创建时间
- `update_time`: 更新时间
- `delete_time`: 删除时间(软删除)
- `deleted`: 是否删除0-否, 1-是)
### 特殊字段
- 所有表的字符编码为 `utf8mb4`,支持存储表情符号
- LONGTEXT 用于存储富文本内容
- TEXT 用于存储较长的文本描述
- VARCHAR 用于存储固定长度的字符串
- DECIMAL 用于存储精确的数值(如百分比、金额等)
- TIMESTAMP 用于存储时间(支持时区)
- INT/BIGINT 用于存储整数
## 注意事项
1. **软删除**所有业务表都使用软删除机制deleted字段删除操作不会真正删除数据
2. **时间戳**:所有时间字段使用 TIMESTAMP 类型,自动记录创建和更新时间
3. **字符集**:数据库和所有表都使用 utf8mb4 字符集支持存储所有Unicode字符
4. **外键**:建议在应用层维护外键关系,不使用数据库外键约束,以提高性能
5. **索引优化**:根据实际查询情况可以添加组合索引
6. **数据量**:对于大数据量表(如日志表、记录表),建议定期归档历史数据
7. **ID生成**建议使用雪花算法或UUID生成ID确保分布式环境下的唯一性
## 默认数据
系统初始化后会包含以下默认数据:
1. **用户**admin密码已加密
2. **部门**:超级部门、默认部门
3. **角色**:管理员、自由角色
4. **权限**:系统管理相关权限
5. **菜单**:系统管理菜单
6. **资源分类**6个默认分类
7. **系统配置**13项默认配置
8. **智能体配置**:思政小帮手
## 扩展建议
根据实际业务需求,可以扩展以下功能:
1. **评论系统**:添加资源/课程评论表
2. **问答系统**:添加问答相关表
3. **考试系统**:添加试题库、试卷、考试记录等表
4. **消息系统**:扩展站内信功能
5. **工作流**:添加审批流程相关表
6. **数据分析**:添加更详细的统计分析表
7. **多租户**:添加租户相关表和字段

View File

@@ -0,0 +1,126 @@
use school_news;
-- 智能体配置表
DROP TABLE IF EXISTS `tb_ai_agent_config`;
CREATE TABLE `tb_ai_agent_config` (
`id` VARCHAR(50) NOT NULL COMMENT '配置ID',
`name` VARCHAR(100) NOT NULL COMMENT '智能体名称',
`avatar` VARCHAR(255) DEFAULT NULL COMMENT '智能体头像',
`system_prompt` TEXT COMMENT '系统提示词',
`model_name` VARCHAR(100) DEFAULT NULL COMMENT '模型名称',
`model_provider` VARCHAR(50) DEFAULT NULL COMMENT '模型提供商',
`temperature` DECIMAL(3,2) DEFAULT 0.70 COMMENT '温度值',
`max_tokens` INT(11) DEFAULT 2000 COMMENT '最大tokens',
`top_p` DECIMAL(3,2) DEFAULT 1.00 COMMENT 'Top P值',
`status` INT(4) DEFAULT 1 COMMENT '状态0禁用 1启用',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
`deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='智能体配置表';
-- 插入默认配置
INSERT INTO `tb_ai_agent_config` (id, name, system_prompt, model_name, temperature, max_tokens, status, creator, create_time) VALUES
('1', '思政小帮手', '你是一个专业的思政学习助手,致力于帮助用户学习思想政治理论知识。请基于提供的知识库内容,为用户提供准确、简洁的回答。', 'gpt-3.5-turbo', 0.7, 2000, 1, '1', now());
-- 知识库表
DROP TABLE IF EXISTS `tb_ai_knowledge`;
CREATE TABLE `tb_ai_knowledge` (
`id` VARCHAR(50) NOT NULL COMMENT '知识ID',
`title` VARCHAR(255) NOT NULL COMMENT '知识标题',
`content` LONGTEXT NOT NULL COMMENT '知识内容',
`source_type` INT(4) DEFAULT 1 COMMENT '来源类型1手动添加 2文件导入 3资源同步',
`source_id` VARCHAR(50) DEFAULT NULL COMMENT '来源ID',
`file_name` VARCHAR(255) DEFAULT NULL COMMENT '文件名',
`file_path` VARCHAR(500) DEFAULT NULL COMMENT '文件路径',
`category` VARCHAR(100) DEFAULT NULL COMMENT '分类',
`tags` VARCHAR(500) DEFAULT NULL COMMENT '标签JSON数组',
`vector_id` VARCHAR(100) DEFAULT NULL COMMENT '向量ID用于向量检索',
`status` INT(4) DEFAULT 1 COMMENT '状态0禁用 1启用',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
`deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
KEY `idx_source` (`source_type`, `source_id`),
KEY `idx_category` (`category`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='知识库表';
-- 对话会话表
DROP TABLE IF EXISTS `tb_ai_conversation`;
CREATE TABLE `tb_ai_conversation` (
`id` VARCHAR(50) NOT NULL COMMENT '会话ID',
`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
`title` VARCHAR(255) DEFAULT NULL COMMENT '会话标题',
`status` INT(4) DEFAULT 1 COMMENT '状态0已结束 1进行中',
`message_count` INT(11) DEFAULT 0 COMMENT '消息数量',
`last_message_time` TIMESTAMP NULL DEFAULT NULL COMMENT '最后消息时间',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_user` (`user_id`),
KEY `idx_last_message_time` (`last_message_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='对话会话表';
-- 对话记录表
DROP TABLE IF EXISTS `tb_ai_message`;
CREATE TABLE `tb_ai_message` (
`id` VARCHAR(50) NOT NULL COMMENT '消息ID',
`conversation_id` VARCHAR(50) NOT NULL COMMENT '会话ID',
`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
`role` VARCHAR(20) NOT NULL COMMENT '角色user用户 assistant助手 system系统',
`content` LONGTEXT NOT NULL COMMENT '消息内容',
`file_ids` VARCHAR(500) DEFAULT NULL COMMENT '关联文件IDJSON数组',
`knowledge_ids` VARCHAR(500) DEFAULT NULL COMMENT '引用知识IDJSON数组',
`token_count` INT(11) DEFAULT 0 COMMENT 'Token数量',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_conversation` (`conversation_id`),
KEY `idx_user` (`user_id`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='对话消息表';
-- 上传文件表
DROP TABLE IF EXISTS `tb_ai_upload_file`;
CREATE TABLE `tb_ai_upload_file` (
`id` VARCHAR(50) NOT NULL COMMENT '文件ID',
`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
`conversation_id` VARCHAR(50) DEFAULT NULL COMMENT '会话ID',
`file_name` VARCHAR(255) NOT NULL COMMENT '文件名',
`file_path` VARCHAR(500) NOT NULL COMMENT '文件路径',
`file_size` BIGINT(20) DEFAULT 0 COMMENT '文件大小(字节)',
`file_type` VARCHAR(50) DEFAULT NULL COMMENT '文件类型',
`mime_type` VARCHAR(100) DEFAULT NULL COMMENT 'MIME类型',
`extracted_text` LONGTEXT COMMENT '提取的文本内容',
`status` INT(4) DEFAULT 1 COMMENT '状态0处理中 1已完成 2失败',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_user` (`user_id`),
KEY `idx_conversation` (`conversation_id`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='上传文件表';
-- AI使用统计表
DROP TABLE IF EXISTS `tb_ai_usage_statistics`;
CREATE TABLE `tb_ai_usage_statistics` (
`id` VARCHAR(50) NOT NULL COMMENT '统计ID',
`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
`stat_date` DATE NOT NULL COMMENT '统计日期',
`conversation_count` INT(11) DEFAULT 0 COMMENT '会话数量',
`message_count` INT(11) DEFAULT 0 COMMENT '消息数量',
`total_tokens` INT(11) DEFAULT 0 COMMENT '总Token数',
`file_count` INT(11) DEFAULT 0 COMMENT '上传文件数',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_date` (`user_id`, `stat_date`),
KEY `idx_user` (`user_id`),
KEY `idx_date` (`stat_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='AI使用统计表';

View File

@@ -0,0 +1,63 @@
use school_news;
-- 课程表
DROP TABLE IF EXISTS `tb_course`;
CREATE TABLE `tb_course` (
`id` VARCHAR(50) NOT NULL COMMENT '课程ID',
`course_id` VARCHAR(50) NOT NULL COMMENT '课程唯一标识',
`name` VARCHAR(255) NOT NULL COMMENT '课程名称',
`cover_image` VARCHAR(255) DEFAULT NULL COMMENT '课程封面图片',
`description` TEXT COMMENT '课程描述',
`content` LONGTEXT COMMENT '课程内容',
`duration` INT(11) DEFAULT 0 COMMENT '课程时长(分钟)',
`teacher` VARCHAR(100) DEFAULT NULL COMMENT '授课老师',
`status` INT(4) DEFAULT 0 COMMENT '状态0未上线 1已上线 2已下架',
`view_count` INT(11) DEFAULT 0 COMMENT '浏览次数',
`learn_count` INT(11) DEFAULT 0 COMMENT '学习人数',
`order_num` INT(4) DEFAULT 0 COMMENT '排序号',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
`deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_course_id` (`course_id`),
KEY `idx_status` (`status`),
KEY `idx_view_count` (`view_count`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='课程表';
-- 课程章节表
DROP TABLE IF EXISTS `tb_course_chapter`;
CREATE TABLE `tb_course_chapter` (
`id` VARCHAR(50) NOT NULL COMMENT '章节ID',
`course_id` VARCHAR(50) NOT NULL COMMENT '课程ID',
`name` VARCHAR(255) NOT NULL COMMENT '章节名称',
`content` LONGTEXT COMMENT '章节内容',
`video_url` VARCHAR(500) DEFAULT NULL COMMENT '视频URL',
`duration` INT(11) DEFAULT 0 COMMENT '章节时长(分钟)',
`order_num` INT(4) DEFAULT 0 COMMENT '排序号',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
`deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
KEY `idx_course` (`course_id`),
KEY `idx_order` (`order_num`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='课程章节表';
-- 课程标签关联表
DROP TABLE IF EXISTS `tb_course_tag`;
CREATE TABLE `tb_course_tag` (
`id` VARCHAR(50) NOT NULL COMMENT '关联ID',
`course_id` VARCHAR(50) NOT NULL COMMENT '课程ID',
`tag_id` VARCHAR(50) NOT NULL COMMENT '标签ID',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_course_tag` (`course_id`, `tag_id`),
KEY `idx_course` (`course_id`),
KEY `idx_tag` (`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='课程标签关联表';

View File

@@ -0,0 +1,115 @@
use school_news;
-- 学习计划/任务表
DROP TABLE IF EXISTS `tb_learning_task`;
CREATE TABLE `tb_learning_task` (
`id` VARCHAR(50) NOT NULL COMMENT '任务ID',
`task_id` VARCHAR(50) NOT NULL COMMENT '任务唯一标识',
`name` VARCHAR(255) NOT NULL COMMENT '任务名称',
`description` TEXT COMMENT '任务描述',
`start_time` TIMESTAMP NULL DEFAULT NULL COMMENT '开始时间',
`end_time` TIMESTAMP NULL DEFAULT NULL COMMENT '结束时间',
`status` INT(4) DEFAULT 1 COMMENT '状态0草稿 1进行中 2已结束',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
`deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_task_id` (`task_id`),
KEY `idx_status` (`status`),
KEY `idx_time` (`start_time`, `end_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='学习任务表';
-- 任务关联资源表
DROP TABLE IF EXISTS `tb_task_resource`;
CREATE TABLE `tb_task_resource` (
`id` VARCHAR(50) NOT NULL COMMENT '关联ID',
`task_id` VARCHAR(50) NOT NULL COMMENT '任务ID',
`resource_id` VARCHAR(50) NOT NULL COMMENT '资源ID',
`required` TINYINT(1) DEFAULT 1 COMMENT '是否必须完成',
`order_num` INT(4) DEFAULT 0 COMMENT '排序号',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_task_resource` (`task_id`, `resource_id`),
KEY `idx_task` (`task_id`),
KEY `idx_resource` (`resource_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='任务资源关联表';
-- 任务关联课程表
DROP TABLE IF EXISTS `tb_task_course`;
CREATE TABLE `tb_task_course` (
`id` VARCHAR(50) NOT NULL COMMENT '关联ID',
`task_id` VARCHAR(50) NOT NULL COMMENT '任务ID',
`course_id` VARCHAR(50) NOT NULL COMMENT '课程ID',
`required` TINYINT(1) DEFAULT 1 COMMENT '是否必须完成',
`order_num` INT(4) DEFAULT 0 COMMENT '排序号',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_task_course` (`task_id`, `course_id`),
KEY `idx_task` (`task_id`),
KEY `idx_course` (`course_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='任务课程关联表';
-- 任务接收人员表
DROP TABLE IF EXISTS `tb_task_user`;
CREATE TABLE `tb_task_user` (
`id` VARCHAR(50) NOT NULL COMMENT '关联ID',
`task_id` VARCHAR(50) NOT NULL COMMENT '任务ID',
`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
`dept_id` VARCHAR(50) DEFAULT NULL COMMENT '部门ID',
`status` INT(4) DEFAULT 0 COMMENT '完成状态0未完成 1已完成',
`progress` DECIMAL(5,2) DEFAULT 0.00 COMMENT '完成进度0-100',
`complete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '完成时间',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_task_user` (`task_id`, `user_id`),
KEY `idx_task` (`task_id`),
KEY `idx_user` (`user_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='任务用户表';
-- 学习记录表
DROP TABLE IF EXISTS `tb_learning_record`;
CREATE TABLE `tb_learning_record` (
`id` VARCHAR(50) NOT NULL COMMENT '记录ID',
`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
`resource_type` INT(4) NOT NULL COMMENT '资源类型1资源 2课程 3章节',
`resource_id` VARCHAR(50) NOT NULL COMMENT '资源ID',
`task_id` VARCHAR(50) DEFAULT NULL COMMENT '任务ID',
`duration` INT(11) DEFAULT 0 COMMENT '学习时长(秒)',
`progress` DECIMAL(5,2) DEFAULT 0.00 COMMENT '学习进度0-100',
`is_complete` TINYINT(1) DEFAULT 0 COMMENT '是否完成',
`complete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '完成时间',
`last_learn_time` TIMESTAMP NULL DEFAULT NULL COMMENT '最后学习时间',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_user` (`user_id`),
KEY `idx_resource` (`resource_type`, `resource_id`),
KEY `idx_task` (`task_id`),
KEY `idx_learn_time` (`last_learn_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='学习记录表';
-- 学习统计表(按天统计)
DROP TABLE IF EXISTS `tb_learning_statistics`;
CREATE TABLE `tb_learning_statistics` (
`id` VARCHAR(50) NOT NULL COMMENT '统计ID',
`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
`stat_date` DATE NOT NULL COMMENT '统计日期',
`total_duration` INT(11) DEFAULT 0 COMMENT '总学习时长(秒)',
`resource_count` INT(11) DEFAULT 0 COMMENT '学习资源数量',
`course_count` INT(11) DEFAULT 0 COMMENT '学习课程数量',
`complete_count` INT(11) DEFAULT 0 COMMENT '完成数量',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_date` (`user_id`, `stat_date`),
KEY `idx_user` (`user_id`),
KEY `idx_date` (`stat_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='学习统计表';

View File

@@ -0,0 +1,54 @@
use school_news;
-- 统一资源权限控制表
DROP TABLE IF EXISTS `tb_resource_permission`;
CREATE TABLE `tb_resource_permission` (
`id` VARCHAR(50) NOT NULL COMMENT '权限ID',
`resource_type` INT(4) NOT NULL COMMENT '资源类型1资源/新闻 2课程 3课程章节 4学习任务',
`resource_id` VARCHAR(50) NOT NULL COMMENT '资源ID',
`dept_id` VARCHAR(50) DEFAULT NULL COMMENT '部门IDNULL表示不限制部门',
`role_id` VARCHAR(50) DEFAULT NULL COMMENT '角色IDNULL表示不限制角色',
`can_read` TINYINT(1) DEFAULT 1 COMMENT '读权限0否 1是',
`can_write` TINYINT(1) DEFAULT 0 COMMENT '写权限0否 1是',
`can_execute` TINYINT(1) DEFAULT 0 COMMENT '执行权限0否 1是',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
`deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_resource_dept_role` (`resource_type`, `resource_id`, `dept_id`, `role_id`, `deleted`),
KEY `idx_resource` (`resource_type`, `resource_id`),
KEY `idx_dept` (`dept_id`),
KEY `idx_role` (`role_id`),
KEY `idx_permissions` (`can_read`, `can_write`, `can_execute`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='统一资源权限控制表';
-- 说明:
-- 1. resource_type 资源类型说明:
-- 1 - 资源/新闻
-- 2 - 课程
-- 3 - 课程章节
-- 4 - 学习任务
-- 可根据实际业务扩展
--
-- 2. dept_id 和 role_id 组合使用:
-- - 都为NULL不限制所有人可访问
-- - dept_id有值role_id为NULL该部门所有人可访问
-- - dept_id为NULLrole_id有值该角色所有人可访问
-- - 都有值:该部门的该角色可访问
--
-- 3. 权限说明:
-- - can_read查看权限浏览、阅读
-- - can_write编辑权限修改、删除
-- - can_execute执行权限发布、审核等操作
--
-- 4. 查询示例:
-- 查询用户对某资源的权限:
-- SELECT * FROM tb_resource_permission
-- WHERE resource_type = 1
-- AND resource_id = 'xxx'
-- AND (dept_id IS NULL OR dept_id = '用户部门')
-- AND (role_id IS NULL OR role_id IN ('用户角色列表'))
-- AND deleted = 0;

View File

@@ -0,0 +1,172 @@
use school_news;
-- 资源/新闻表
DROP TABLE IF EXISTS `tb_resource`;
CREATE TABLE `tb_resource` (
`id` VARCHAR(50) NOT NULL COMMENT '资源ID',
`title` VARCHAR(255) NOT NULL COMMENT '资源标题',
`content` LONGTEXT COMMENT '资源内容',
`summary` VARCHAR(500) DEFAULT NULL COMMENT '资源简介',
`cover_image` VARCHAR(255) DEFAULT NULL COMMENT '封面图片',
`category_id` VARCHAR(50) DEFAULT NULL COMMENT '分类ID',
`author` VARCHAR(100) DEFAULT NULL COMMENT '作者',
`source` VARCHAR(255) DEFAULT NULL COMMENT '来源',
`source_url` VARCHAR(500) DEFAULT NULL COMMENT '来源URL',
`view_count` INT(11) DEFAULT 0 COMMENT '浏览次数',
`like_count` INT(11) DEFAULT 0 COMMENT '点赞次数',
`collect_count` INT(11) DEFAULT 0 COMMENT '收藏次数',
`status` INT(4) DEFAULT 0 COMMENT '状态0草稿 1已发布 2下架',
`is_recommend` TINYINT(1) DEFAULT 0 COMMENT '是否推荐',
`is_banner` TINYINT(1) DEFAULT 0 COMMENT '是否轮播',
`publish_time` TIMESTAMP NULL DEFAULT NULL COMMENT '发布时间',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
`deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
KEY `idx_category` (`category_id`),
KEY `idx_status` (`status`),
KEY `idx_publish_time` (`publish_time`),
KEY `idx_view_count` (`view_count`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='资源表';
-- 资源分类表
DROP TABLE IF EXISTS `tb_resource_category`;
CREATE TABLE `tb_resource_category` (
`id` VARCHAR(50) NOT NULL COMMENT '分类ID',
`category_id` VARCHAR(50) NOT NULL COMMENT '分类唯一标识',
`name` VARCHAR(100) NOT NULL COMMENT '分类名称',
`parent_id` VARCHAR(50) DEFAULT NULL COMMENT '父分类ID',
`description` VARCHAR(255) DEFAULT NULL COMMENT '分类描述',
`icon` VARCHAR(100) DEFAULT NULL COMMENT '分类图标',
`order_num` INT(4) DEFAULT 0 COMMENT '排序号',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
`deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_category_id` (`category_id`),
KEY `idx_parent` (`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='资源分类表';
-- 插入默认分类(党史学习、领导讲话、政策解读、红色经典、专题报告、思政案例)
INSERT INTO `tb_resource_category` (id, category_id, name, description, order_num, creator, create_time) VALUES
('1', 'party_history', '党史学习', '党史学习相关资源', 1, '1', now()),
('2', 'leader_speech', '领导讲话', '领导讲话相关资源', 2, '1', now()),
('3', 'policy_interpretation', '政策解读', '政策解读相关资源', 3, '1', now()),
('4', 'red_classic', '红色经典', '红色经典相关资源', 4, '1', now()),
('5', 'special_report', '专题报告', '专题报告相关资源', 5, '1', now()),
('6', 'ideological_case', '思政案例', '思政案例相关资源', 6, '1', now());
-- Banner管理表
DROP TABLE IF EXISTS `tb_banner`;
CREATE TABLE `tb_banner` (
`id` VARCHAR(50) NOT NULL COMMENT 'Banner ID',
`title` VARCHAR(255) NOT NULL COMMENT 'Banner标题',
`image_url` VARCHAR(500) NOT NULL COMMENT 'Banner图片URL',
`link_type` INT(4) DEFAULT 1 COMMENT '链接类型1资源 2课程 3外部链接',
`link_id` VARCHAR(50) DEFAULT NULL COMMENT '关联ID资源ID或课程ID',
`link_url` VARCHAR(500) DEFAULT NULL COMMENT '外部链接URL',
`order_num` INT(4) DEFAULT 0 COMMENT '排序号',
`status` INT(4) DEFAULT 1 COMMENT '状态0禁用 1启用',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
`deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
KEY `idx_order` (`order_num`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Banner表';
-- 资源推荐表
DROP TABLE IF EXISTS `tb_resource_recommend`;
CREATE TABLE `tb_resource_recommend` (
`id` VARCHAR(50) NOT NULL COMMENT '推荐ID',
`resource_id` VARCHAR(50) NOT NULL COMMENT '资源ID',
`order_num` INT(4) DEFAULT 0 COMMENT '排序号',
`reason` VARCHAR(255) DEFAULT NULL COMMENT '推荐理由',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
`deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_resource` (`resource_id`),
KEY `idx_order` (`order_num`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='资源推荐表';
-- 标签表
DROP TABLE IF EXISTS `tb_tag`;
CREATE TABLE `tb_tag` (
`id` VARCHAR(50) NOT NULL COMMENT '标签ID',
`tag_id` VARCHAR(50) NOT NULL COMMENT '标签唯一标识',
`name` VARCHAR(100) NOT NULL COMMENT '标签名称',
`color` VARCHAR(20) DEFAULT NULL COMMENT '标签颜色',
`description` VARCHAR(255) DEFAULT NULL COMMENT '标签描述',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
`deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tag_id` (`tag_id`),
UNIQUE KEY `uk_tag_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='标签表';
-- 资源标签关联表
DROP TABLE IF EXISTS `tb_resource_tag`;
CREATE TABLE `tb_resource_tag` (
`id` VARCHAR(50) NOT NULL COMMENT '关联ID',
`resource_id` VARCHAR(50) NOT NULL COMMENT '资源ID',
`tag_id` VARCHAR(50) NOT NULL COMMENT '标签ID',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_resource_tag` (`resource_id`, `tag_id`),
KEY `idx_resource` (`resource_id`),
KEY `idx_tag` (`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='资源标签关联表';
-- 数据采集配置表
DROP TABLE IF EXISTS `tb_data_collection_config`;
CREATE TABLE `tb_data_collection_config` (
`id` VARCHAR(50) NOT NULL COMMENT '配置ID',
`name` VARCHAR(100) NOT NULL COMMENT '配置名称',
`source_url` VARCHAR(500) NOT NULL COMMENT '采集源URL',
`source_type` VARCHAR(50) DEFAULT NULL COMMENT '采集源类型',
`frequency` VARCHAR(20) DEFAULT 'daily' COMMENT '采集频率daily每天 weekly每周',
`category_id` VARCHAR(50) DEFAULT NULL COMMENT '默认分类ID',
`status` INT(4) DEFAULT 1 COMMENT '状态0禁用 1启用',
`last_collect_time` TIMESTAMP NULL DEFAULT NULL COMMENT '最后采集时间',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
`deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='数据采集配置表';
-- 数据采集记录表
DROP TABLE IF EXISTS `tb_data_collection_log`;
CREATE TABLE `tb_data_collection_log` (
`id` VARCHAR(50) NOT NULL COMMENT '记录ID',
`config_id` VARCHAR(50) NOT NULL COMMENT '配置ID',
`collect_count` INT(11) DEFAULT 0 COMMENT '采集数量',
`success_count` INT(11) DEFAULT 0 COMMENT '成功数量',
`fail_count` INT(11) DEFAULT 0 COMMENT '失败数量',
`status` INT(4) DEFAULT 1 COMMENT '状态0失败 1成功 2部分成功',
`message` TEXT COMMENT '采集消息',
`collect_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '采集时间',
PRIMARY KEY (`id`),
KEY `idx_config` (`config_id`),
KEY `idx_collect_time` (`collect_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='数据采集记录表';

View File

@@ -0,0 +1,167 @@
use school_news;
-- 操作日志表
DROP TABLE IF EXISTS `tb_sys_operation_log`;
CREATE TABLE `tb_sys_operation_log` (
`id` VARCHAR(50) NOT NULL COMMENT '日志ID',
`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
`username` VARCHAR(50) NOT NULL COMMENT '用户名',
`module` VARCHAR(100) DEFAULT NULL COMMENT '操作模块',
`operation` VARCHAR(100) DEFAULT NULL COMMENT '操作类型',
`method` VARCHAR(200) DEFAULT NULL COMMENT '请求方法',
`request_url` VARCHAR(500) DEFAULT NULL COMMENT '请求URL',
`request_method` VARCHAR(20) DEFAULT NULL COMMENT '请求方式GET/POST等',
`request_params` TEXT COMMENT '请求参数',
`response_data` TEXT COMMENT '响应数据',
`ip_address` VARCHAR(45) DEFAULT NULL COMMENT 'IP地址',
`ip_source` VARCHAR(100) DEFAULT NULL COMMENT 'IP来源',
`browser` VARCHAR(100) DEFAULT NULL COMMENT '浏览器',
`os` VARCHAR(100) DEFAULT NULL COMMENT '操作系统',
`status` INT(4) DEFAULT 1 COMMENT '操作状态0失败 1成功',
`error_message` TEXT COMMENT '错误消息',
`execute_time` INT(11) DEFAULT 0 COMMENT '执行时长(毫秒)',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
PRIMARY KEY (`id`),
KEY `idx_user` (`user_id`),
KEY `idx_module` (`module`),
KEY `idx_create_time` (`create_time`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='操作日志表';
-- 系统配置表
DROP TABLE IF EXISTS `tb_sys_config`;
CREATE TABLE `tb_sys_config` (
`id` VARCHAR(50) NOT NULL COMMENT '配置ID',
`config_key` VARCHAR(100) NOT NULL COMMENT '配置键',
`config_value` TEXT COMMENT '配置值',
`config_type` VARCHAR(50) DEFAULT 'string' COMMENT '配置类型string/number/boolean/json',
`config_group` VARCHAR(50) DEFAULT NULL COMMENT '配置分组',
`description` VARCHAR(255) DEFAULT NULL COMMENT '配置描述',
`is_system` TINYINT(1) DEFAULT 0 COMMENT '是否系统配置',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
`deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_config_key` (`config_key`),
KEY `idx_group` (`config_group`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统配置表';
-- 插入默认系统配置
INSERT INTO `tb_sys_config` (id, config_key, config_value, config_type, config_group, description, is_system, creator, create_time) VALUES
('1', 'system.platform.name', '思政学习平台', 'string', 'platform', '平台名称', 1, '1', now()),
('2', 'system.platform.logo', '/assets/logo.png', 'string', 'platform', '平台Logo', 1, '1', now()),
('3', 'system.platform.school_badge', '/assets/school_badge.png', 'string', 'platform', '学校校徽', 1, '1', now()),
('4', 'system.menu.home', '首页', 'string', 'menu', '首页菜单名称', 0, '1', now()),
('5', 'system.menu.resource', '资源中心', 'string', 'menu', '资源中心菜单名称', 0, '1', now()),
('6', 'system.menu.learning', '学习计划', 'string', 'menu', '学习计划菜单名称', 0, '1', now()),
('7', 'system.menu.activity', '专题活动', 'string', 'menu', '专题活动菜单名称', 0, '1', now()),
('8', 'system.menu.culture', '红色常信', 'string', 'menu', '红色常信菜单名称', 0, '1', now()),
('9', 'system.banner.auto_play', 'true', 'boolean', 'banner', 'Banner自动播放', 0, '1', now()),
('10', 'system.banner.interval', '5000', 'number', 'banner', 'Banner切换间隔毫秒', 0, '1', now()),
('11', 'system.resource.auto_publish', 'false', 'boolean', 'resource', '资源自动发布', 0, '1', now()),
('12', 'system.resource.auto_publish_time', '08:00', 'string', 'resource', '自动发布时间', 0, '1', now()),
('13', 'system.ai.enabled', 'true', 'boolean', 'ai', '是否启用智能体', 0, '1', now());
-- 系统访问统计表
DROP TABLE IF EXISTS `tb_sys_visit_statistics`;
CREATE TABLE `tb_sys_visit_statistics` (
`id` VARCHAR(50) NOT NULL COMMENT '统计ID',
`stat_date` DATE NOT NULL COMMENT '统计日期',
`total_visits` INT(11) DEFAULT 0 COMMENT '总访问量',
`unique_visitors` INT(11) DEFAULT 0 COMMENT '独立访客数',
`new_users` INT(11) DEFAULT 0 COMMENT '新增用户数',
`active_users` INT(11) DEFAULT 0 COMMENT '活跃用户数',
`page_views` INT(11) DEFAULT 0 COMMENT '页面浏览量',
`avg_visit_duration` INT(11) DEFAULT 0 COMMENT '平均访问时长(秒)',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_stat_date` (`stat_date`),
KEY `idx_date` (`stat_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统访问统计表';
-- 通知表
DROP TABLE IF EXISTS `tb_sys_notification`;
CREATE TABLE `tb_sys_notification` (
`id` VARCHAR(50) NOT NULL COMMENT '通知ID',
`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
`type` INT(4) DEFAULT 1 COMMENT '通知类型1系统通知 2任务通知 3成就通知',
`title` VARCHAR(255) NOT NULL COMMENT '通知标题',
`content` TEXT COMMENT '通知内容',
`link_type` INT(4) DEFAULT NULL COMMENT '链接类型1资源 2课程 3任务',
`link_id` VARCHAR(50) DEFAULT NULL COMMENT '链接ID',
`is_read` TINYINT(1) DEFAULT 0 COMMENT '是否已读',
`read_time` TIMESTAMP NULL DEFAULT NULL COMMENT '阅读时间',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_user` (`user_id`),
KEY `idx_is_read` (`is_read`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统通知表';
-- 文件上传记录表
DROP TABLE IF EXISTS `tb_sys_file`;
CREATE TABLE `tb_sys_file` (
`id` VARCHAR(50) NOT NULL COMMENT '文件ID',
`file_name` VARCHAR(255) NOT NULL COMMENT '文件名',
`original_name` VARCHAR(255) NOT NULL COMMENT '原始文件名',
`file_path` VARCHAR(500) NOT NULL COMMENT '文件路径',
`file_url` VARCHAR(500) DEFAULT NULL COMMENT '访问URL',
`file_size` BIGINT(20) DEFAULT 0 COMMENT '文件大小(字节)',
`file_type` VARCHAR(50) DEFAULT NULL COMMENT '文件类型',
`mime_type` VARCHAR(100) DEFAULT NULL COMMENT 'MIME类型',
`module` VARCHAR(50) DEFAULT NULL COMMENT '所属模块',
`business_id` VARCHAR(50) DEFAULT NULL COMMENT '业务ID',
`uploader` VARCHAR(50) DEFAULT NULL COMMENT '上传者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
PRIMARY KEY (`id`),
KEY `idx_module` (`module`),
KEY `idx_business` (`business_id`),
KEY `idx_uploader` (`uploader`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文件上传记录表';
-- 数据字典表
DROP TABLE IF EXISTS `tb_sys_dict_type`;
CREATE TABLE `tb_sys_dict_type` (
`id` VARCHAR(50) NOT NULL COMMENT '字典类型ID',
`dict_type` VARCHAR(100) NOT NULL COMMENT '字典类型',
`dict_name` VARCHAR(100) NOT NULL COMMENT '字典名称',
`description` VARCHAR(255) DEFAULT NULL COMMENT '描述',
`status` INT(4) DEFAULT 1 COMMENT '状态0禁用 1启用',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
`deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_dict_type` (`dict_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='字典类型表';
-- 数据字典详情表
DROP TABLE IF EXISTS `tb_sys_dict_data`;
CREATE TABLE `tb_sys_dict_data` (
`id` VARCHAR(50) NOT NULL COMMENT '字典数据ID',
`dict_type` VARCHAR(100) NOT NULL COMMENT '字典类型',
`dict_label` VARCHAR(100) NOT NULL COMMENT '字典标签',
`dict_value` VARCHAR(100) NOT NULL COMMENT '字典值',
`dict_sort` INT(4) DEFAULT 0 COMMENT '排序',
`css_class` VARCHAR(100) DEFAULT NULL COMMENT '样式类',
`list_class` VARCHAR(100) DEFAULT NULL COMMENT '列表样式',
`is_default` TINYINT(1) DEFAULT 0 COMMENT '是否默认',
`status` INT(4) DEFAULT 1 COMMENT '状态0禁用 1启用',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
`deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
KEY `idx_dict_type` (`dict_type`),
KEY `idx_dict_sort` (`dict_sort`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='字典数据表';

View File

@@ -0,0 +1,101 @@
use school_news;
-- 用户收藏表
DROP TABLE IF EXISTS `tb_user_collection`;
CREATE TABLE `tb_user_collection` (
`id` VARCHAR(50) NOT NULL COMMENT '收藏ID',
`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
`collection_type` INT(4) NOT NULL COMMENT '收藏类型1资源 2课程',
`collection_id` VARCHAR(50) NOT NULL COMMENT '收藏对象ID',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '收藏时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_collection` (`user_id`, `collection_type`, `collection_id`),
KEY `idx_user` (`user_id`),
KEY `idx_collection` (`collection_type`, `collection_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户收藏表';
-- 成就表
DROP TABLE IF EXISTS `tb_achievement`;
CREATE TABLE `tb_achievement` (
`id` VARCHAR(50) NOT NULL COMMENT '成就ID',
`achievement_id` VARCHAR(50) NOT NULL COMMENT '成就唯一标识',
`name` VARCHAR(100) NOT NULL COMMENT '成就名称',
`description` VARCHAR(255) DEFAULT NULL COMMENT '成就描述',
`icon` VARCHAR(255) DEFAULT NULL COMMENT '成就图标',
`type` INT(4) DEFAULT 1 COMMENT '成就类型1勋章 2等级',
`level` INT(4) DEFAULT 1 COMMENT '成就等级',
`condition_type` INT(4) DEFAULT 1 COMMENT '获取条件类型1学习时长 2资源数量 3课程数量 4连续学习天数',
`condition_value` INT(11) DEFAULT 0 COMMENT '条件值',
`points` INT(11) DEFAULT 0 COMMENT '获得积分',
`order_num` INT(4) DEFAULT 0 COMMENT '排序号',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
`deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_achievement_id` (`achievement_id`),
KEY `idx_type` (`type`),
KEY `idx_level` (`level`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='成就表';
-- 用户成就关联表
DROP TABLE IF EXISTS `tb_user_achievement`;
CREATE TABLE `tb_user_achievement` (
`id` VARCHAR(50) NOT NULL COMMENT '关联ID',
`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
`achievement_id` VARCHAR(50) NOT NULL COMMENT '成就ID',
`obtain_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '获得时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_achievement` (`user_id`, `achievement_id`),
KEY `idx_user` (`user_id`),
KEY `idx_achievement` (`achievement_id`),
KEY `idx_obtain_time` (`obtain_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户成就表';
-- 用户积分表
DROP TABLE IF EXISTS `tb_user_points`;
CREATE TABLE `tb_user_points` (
`id` VARCHAR(50) NOT NULL COMMENT '积分ID',
`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
`total_points` INT(11) DEFAULT 0 COMMENT '总积分',
`current_points` INT(11) DEFAULT 0 COMMENT '当前积分',
`level` INT(4) DEFAULT 1 COMMENT '用户等级',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user` (`user_id`),
KEY `idx_level` (`level`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户积分表';
-- 积分记录表
DROP TABLE IF EXISTS `tb_points_record`;
CREATE TABLE `tb_points_record` (
`id` VARCHAR(50) NOT NULL COMMENT '记录ID',
`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
`points` INT(11) NOT NULL COMMENT '积分变动',
`type` INT(4) DEFAULT 1 COMMENT '类型1获得 2消费',
`source_type` INT(4) DEFAULT 1 COMMENT '来源类型1学习资源 2学习课程 3完成任务 4获得成就',
`source_id` VARCHAR(50) DEFAULT NULL COMMENT '来源ID',
`description` VARCHAR(255) DEFAULT NULL COMMENT '说明',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_user` (`user_id`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='积分记录表';
-- 用户浏览记录表
DROP TABLE IF EXISTS `tb_user_browse_record`;
CREATE TABLE `tb_user_browse_record` (
`id` VARCHAR(50) NOT NULL COMMENT '记录ID',
`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
`browse_type` INT(4) NOT NULL COMMENT '浏览类型1资源 2课程',
`browse_id` VARCHAR(50) NOT NULL COMMENT '浏览对象ID',
`browse_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '浏览时间',
`ip_address` VARCHAR(45) DEFAULT NULL COMMENT 'IP地址',
PRIMARY KEY (`id`),
KEY `idx_user` (`user_id`),
KEY `idx_browse` (`browse_type`, `browse_id`),
KEY `idx_time` (`browse_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户浏览记录表';

View File

@@ -0,0 +1,45 @@
-- =====================================================
-- 校园思政新闻平台数据库初始化脚本
-- 版本: 1.0.0
-- 说明: 该脚本会创建数据库和所有表结构,并插入初始数据
-- 注意: 执行前请确保MySQL服务已启动并且有足够的权限
-- =====================================================
-- 1. 创建数据库
SOURCE createDB.sql;
-- 2. 创建用户相关表
SOURCE createTableUser.sql;
-- 3. 创建权限相关表
SOURCE createTablePermission.sql;
-- 4. 创建统一资源权限控制表
SOURCE createTablePermissionControl.sql;
-- 5. 创建资源管理相关表
SOURCE createTableResource.sql;
-- 6. 创建课程管理相关表
SOURCE createTableCourse.sql;
-- 7. 创建学习管理相关表
SOURCE createTableLearning.sql;
-- 8. 创建个人中心相关表
SOURCE createTableUserCenter.sql;
-- 9. 创建智能体相关表
SOURCE createTableAI.sql;
-- 10. 创建系统配置和日志相关表
SOURCE createTableSystem.sql;
-- =====================================================
-- 初始化完成
-- =====================================================
-- 数据库: school_news
-- 表数量: 50+ 张表
-- 默认用户: admin (密码需要查看 createTableUser.sql)
-- =====================================================

View File

@@ -0,0 +1,395 @@
# 统一资源权限控制使用说明
## 📋 概述
采用**统一权限表** `tb_resource_permission` 来管理所有资源(新闻、课程、任务等)的访问权限,支持基于**部门**和**角色**的细粒度权限控制。
## 🎯 设计优势
1.**统一管理**:所有资源类型的权限在一张表中管理
2.**灵活控制**:支持部门、角色、部门+角色三种授权方式
3.**细粒度**:支持读、写、执行三种权限级别
4.**易扩展**:新增资源类型只需添加类型编号
5.**高性能**:合理的索引设计,查询效率高
## 📊 表结构
```sql
tb_resource_permission (
id VARCHAR(50) 主键
resource_type INT(4) 资源类型
resource_id VARCHAR(50) 资源ID
dept_id VARCHAR(50) 部门ID(可为NULL
role_id VARCHAR(50) 角色ID(可为NULL
can_read TINYINT(1) 读权限
can_write TINYINT(1) 写权限
can_execute TINYINT(1) 执行权限
creator VARCHAR(50) 创建者
create_time TIMESTAMP 创建时间
...
)
```
## 🏷️ 资源类型编码
| 类型值 | 资源类型 | 说明 |
|--------|----------|------|
| 1 | 资源/新闻 | tb_resource |
| 2 | 课程 | tb_course |
| 3 | 课程章节 | tb_course_chapter |
| 4 | 学习任务 | tb_learning_task |
*可根据业务需要扩展更多类型*
## 🔐 权限组合说明
### 部门和角色组合
| dept_id | role_id | 含义 | 应用场景 |
|---------|---------|------|----------|
| NULL | NULL | 公开 | 所有人可访问 |
| 有值 | NULL | 部门限制 | 该部门所有人可访问 |
| NULL | 有值 | 角色限制 | 该角色所有人可访问(跨部门) |
| 有值 | 有值 | 部门+角色 | 特定部门的特定角色可访问 |
### 权限级别说明
| 权限字段 | 含义 | 典型操作 |
|---------|------|----------|
| can_read | 读权限 | 查看、浏览、阅读、下载 |
| can_write | 写权限 | 编辑、修改、删除 |
| can_execute | 执行权限 | 发布、审核、归档、推荐 |
## 💡 使用示例
### 示例1公开资源
```sql
-- 所有人都可以阅读的公开资源
INSERT INTO tb_resource_permission (
id, resource_type, resource_id,
dept_id, role_id,
can_read, can_write, can_execute,
creator, create_time
) VALUES (
'1', 1, 'res_001',
NULL, NULL, -- 部门和角色都为NULL表示公开
1, 0, 0, -- 只有读权限
'admin', NOW()
);
```
### 示例2部门限制
```sql
-- 只有"党委办公室"部门可以访问的资源
INSERT INTO tb_resource_permission (
id, resource_type, resource_id,
dept_id, role_id,
can_read, can_write, can_execute,
creator, create_time
) VALUES (
'2', 1, 'res_002',
'dept_party_office', NULL, -- 指定部门
1, 0, 0,
'admin', NOW()
);
```
### 示例3角色限制跨部门
```sql
-- 所有"管理员"角色可以编辑的课程(不限部门)
INSERT INTO tb_resource_permission (
id, resource_type, resource_id,
dept_id, role_id,
can_read, can_write, can_execute,
creator, create_time
) VALUES (
'3', 2, 'course_001',
NULL, 'admin', -- 只指定角色
1, 1, 0, -- 读写权限
'admin', NOW()
);
```
### 示例4部门+角色组合
```sql
-- "教务处"部门的"教师"角色可以管理的课程
INSERT INTO tb_resource_permission (
id, resource_type, resource_id,
dept_id, role_id,
can_read, can_write, can_execute,
creator, create_time
) VALUES (
'4', 2, 'course_002',
'dept_academic', 'teacher', -- 部门+角色
1, 1, 1, -- 全部权限
'admin', NOW()
);
```
### 示例5多个授权组合
同一个资源可以有多条权限记录:
```sql
-- 示例:一个课程有多种访问权限
-- 1. 所有人可以查看
INSERT INTO tb_resource_permission VALUES
('5', 2, 'course_003', NULL, NULL, 1, 0, 0, 'admin', NOW());
-- 2. "教师"角色可以编辑
INSERT INTO tb_resource_permission VALUES
('6', 2, 'course_003', NULL, 'teacher', 1, 1, 0, 'admin', NOW());
-- 3. "教务处"的"管理员"可以发布
INSERT INTO tb_resource_permission VALUES
('7', 2, 'course_003', 'dept_academic', 'admin', 1, 1, 1, 'admin', NOW());
```
## 🔍 权限查询
### 查询1检查用户对资源的访问权限
```sql
-- 检查用户是否可以访问某个资源
-- 假设:用户部门='dept_001',角色='teacher',资源类型=2资源ID='course_001'
SELECT
MAX(can_read) as has_read,
MAX(can_write) as has_write,
MAX(can_execute) as has_execute
FROM tb_resource_permission
WHERE resource_type = 2
AND resource_id = 'course_001'
AND deleted = 0
AND (
-- 公开资源
(dept_id IS NULL AND role_id IS NULL)
OR
-- 部门匹配
(dept_id = 'dept_001' AND role_id IS NULL)
OR
-- 角色匹配
(dept_id IS NULL AND role_id = 'teacher')
OR
-- 部门+角色匹配
(dept_id = 'dept_001' AND role_id = 'teacher')
);
```
### 查询2获取用户可访问的资源列表
```sql
-- 获取用户可以访问的所有课程
-- 假设:用户部门='dept_001',角色列表=['teacher', 'user']
SELECT DISTINCT rp.resource_id, c.*
FROM tb_resource_permission rp
INNER JOIN tb_course c ON c.course_id = rp.resource_id
WHERE rp.resource_type = 2
AND rp.can_read = 1
AND rp.deleted = 0
AND (
(rp.dept_id IS NULL AND rp.role_id IS NULL)
OR (rp.dept_id = 'dept_001' AND rp.role_id IS NULL)
OR (rp.dept_id IS NULL AND rp.role_id IN ('teacher', 'user'))
OR (rp.dept_id = 'dept_001' AND rp.role_id IN ('teacher', 'user'))
)
ORDER BY c.create_time DESC;
```
### 查询3获取资源的所有权限配置
```sql
-- 查看某个资源配置了哪些权限
SELECT
rp.*,
d.name as dept_name,
r.name as role_name
FROM tb_resource_permission rp
LEFT JOIN tb_sys_dept d ON d.dept_id = rp.dept_id
LEFT JOIN tb_sys_role r ON r.role_id = rp.role_id
WHERE rp.resource_type = 1
AND rp.resource_id = 'res_001'
AND rp.deleted = 0;
```
## 🎨 业务场景实现
### 场景1新闻资源的分级查看
```sql
-- 1. 公开新闻:所有人可查看
INSERT INTO tb_resource_permission VALUES
(UUID(), 1, 'news_public', NULL, NULL, 1, 0, 0, 'admin', NOW());
-- 2. 内部新闻:全体员工可查看
INSERT INTO tb_resource_permission VALUES
(UUID(), 1, 'news_internal', NULL, 'employee', 1, 0, 0, 'admin', NOW());
-- 3. 机密新闻:只有党委办公室可查看
INSERT INTO tb_resource_permission VALUES
(UUID(), 1, 'news_confidential', 'dept_party', NULL, 1, 0, 0, 'admin', NOW());
```
### 场景2课程权限分配
```sql
-- 1. 所有学生可以学习
INSERT INTO tb_resource_permission VALUES
(UUID(), 2, 'course_101', NULL, 'student', 1, 0, 0, 'admin', NOW());
-- 2. 授课教师可以编辑
INSERT INTO tb_resource_permission VALUES
(UUID(), 2, 'course_101', NULL, 'teacher', 1, 1, 0, 'admin', NOW());
-- 3. 教务处管理员可以发布
INSERT INTO tb_resource_permission VALUES
(UUID(), 2, 'course_101', 'dept_academic', 'admin', 1, 1, 1, 'admin', NOW());
```
### 场景3学习任务的部门分配
```sql
-- 为不同部门分配不同的学习任务
-- 党委办公室的任务
INSERT INTO tb_resource_permission VALUES
(UUID(), 4, 'task_party', 'dept_party', NULL, 1, 0, 1, 'admin', NOW());
-- 教务处的任务
INSERT INTO tb_resource_permission VALUES
(UUID(), 4, 'task_academic', 'dept_academic', NULL, 1, 0, 1, 'admin', NOW());
```
## 📝 Java代码示例
### 权限检查工具类
```java
public class ResourcePermissionChecker {
/**
* 检查用户是否有资源访问权限
*/
public boolean hasPermission(String userId, int resourceType,
String resourceId, PermissionType type) {
// 1. 获取用户的部门和角色
UserInfo user = getUserInfo(userId);
List<String> roleIds = user.getRoleIds();
String deptId = user.getDeptId();
// 2. 查询权限
List<ResourcePermission> permissions = permissionMapper.selectList(
new QueryWrapper<ResourcePermission>()
.eq("resource_type", resourceType)
.eq("resource_id", resourceId)
.eq("deleted", 0)
.and(wrapper -> wrapper
// 公开
.or(w -> w.isNull("dept_id").isNull("role_id"))
// 部门匹配
.or(w -> w.eq("dept_id", deptId).isNull("role_id"))
// 角色匹配
.or(w -> w.isNull("dept_id").in("role_id", roleIds))
// 部门+角色匹配
.or(w -> w.eq("dept_id", deptId).in("role_id", roleIds))
)
);
// 3. 判断权限
for (ResourcePermission perm : permissions) {
switch (type) {
case READ: if (perm.getCanRead()) return true; break;
case WRITE: if (perm.getCanWrite()) return true; break;
case EXECUTE: if (perm.getCanExecute()) return true; break;
}
}
return false;
}
/**
* 获取用户可访问的资源ID列表
*/
public List<String> getAccessibleResources(String userId, int resourceType) {
UserInfo user = getUserInfo(userId);
// ... 类似逻辑
return resourceIds;
}
}
```
### 权限注解
```java
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RequirePermission {
ResourceType resourceType();
PermissionType permission() default PermissionType.READ;
}
// 使用示例
@RequirePermission(resourceType = ResourceType.COURSE, permission = PermissionType.WRITE)
public void updateCourse(String courseId, CourseDTO dto) {
// ...
}
```
## ⚠️ 注意事项
1. **NULL值处理**dept_id 和 role_id 为 NULL 时有特殊含义,不能用空字符串代替
2. **权限优先级**:查询时使用 MAX() 聚合,任一条记录授权即有权限
3. **索引优化**:已创建组合索引 `idx_resource`,确保查询性能
4. **软删除**:使用 deleted 字段,避免物理删除导致的问题
5. **唯一约束**`uk_resource_dept_role` 防止重复配置,包含 deleted 字段支持重复添加
## 🔄 权限变更场景
### 场景1资源从公开改为部门限制
```sql
-- 1. 删除原公开权限
UPDATE tb_resource_permission
SET deleted = 1, delete_time = NOW()
WHERE resource_type = 1
AND resource_id = 'res_001'
AND dept_id IS NULL AND role_id IS NULL;
-- 2. 添加部门限制
INSERT INTO tb_resource_permission VALUES
(UUID(), 1, 'res_001', 'dept_target', NULL, 1, 0, 0, 'admin', NOW());
```
### 场景2提升用户权限从只读到读写
```sql
-- 更新权限级别
UPDATE tb_resource_permission
SET can_write = 1,
updater = 'admin',
update_time = NOW()
WHERE resource_type = 2
AND resource_id = 'course_001'
AND role_id = 'teacher';
```
## 📈 性能优化建议
1. **合理使用索引**:已创建的索引包括 `idx_resource``idx_dept``idx_role`
2. **缓存策略**对频繁访问的资源权限进行Redis缓存
3. **批量查询**:使用 IN 子句批量查询多个资源的权限
4. **避免全表扫描**:查询时务必带上 resource_type 和 resource_id
## 🔗 相关表说明
- `tb_sys_dept`: 部门表
- `tb_sys_role`: 角色表
- `tb_sys_user_dept_role`: 用户-部门-角色关联表
- `tb_resource`: 资源表
- `tb_course`: 课程表
- `tb_learning_task`: 学习任务表

View File

@@ -0,0 +1,157 @@
# 校园思政新闻平台 - 数据库表结构汇总
## 一、用户管理模块3张表
| 表名 | 中文名 | 说明 | 主要字段 |
|------|--------|------|----------|
| tb_sys_user | 用户表 | 存储用户账号信息 | id, username, password, email, phone, status |
| tb_sys_user_info | 用户信息表 | 存储用户详细信息 | id, user_id, avatar, full_name, gender, address |
| tb_sys_login_log | 登录日志表 | 记录用户登录历史 | id, user_id, ip_address, login_time, status |
## 二、权限管理模块8张表
| 表名 | 中文名 | 说明 | 主要字段 |
|------|--------|------|----------|
| tb_sys_dept | 部门表 | 组织架构 | id, dept_id, name, parent_id, description |
| tb_sys_role | 角色表 | 系统角色 | id, role_id, name, description |
| tb_sys_dept_role | 部门-角色关联表 | 部门与角色关系 | id, dept_id, role_id |
| tb_sys_user_dept_role | 用户-部门-角色关联表 | 用户在部门中的角色 | id, user_id, dept_id, role_id |
| tb_sys_permission | 权限表 | 系统权限定义 | id, permission_id, name, code, description |
| tb_sys_role_permission | 角色-权限关联表 | 角色拥有的权限 | id, role_id, permission_id |
| tb_sys_menu | 菜单表 | 系统菜单 | id, menu_id, name, parent_id, url, type |
| tb_sys_menu_permission | 菜单-权限关联表 | 菜单访问权限 | id, menu_id, permission_id |
## 三、资源管理模块8张表
| 表名 | 中文名 | 说明 | 主要字段 |
|------|--------|------|----------|
| tb_resource | 资源表 | 新闻/文章资源 | id, title, content, category_id, view_count, status |
| tb_resource_category | 资源分类表 | 资源分类党史学习等6类 | id, category_id, name, parent_id, order_num |
| tb_banner | Banner表 | 轮播图管理 | id, title, image_url, link_type, link_id, order_num |
| tb_resource_recommend | 资源推荐表 | TOP资源推荐 | id, resource_id, order_num, reason |
| tb_tag | 标签表 | 数据标签 | id, tag_id, name, color, description |
| tb_resource_tag | 资源-标签关联表 | 资源标签关系 | id, resource_id, tag_id |
| tb_data_collection_config | 数据采集配置表 | 数据采集源配置 | id, name, source_url, frequency, status |
| tb_data_collection_log | 数据采集记录表 | 采集日志 | id, config_id, collect_count, status, collect_time |
## 四、课程管理模块4张表
| 表名 | 中文名 | 说明 | 主要字段 |
|------|--------|------|----------|
| tb_course | 课程表 | 课程信息 | id, course_id, name, description, teacher, status |
| tb_course_chapter | 课程章节表 | 课程章节内容 | id, course_id, name, content, video_url, order_num |
| tb_course_tag | 课程-标签关联表 | 课程标签关系 | id, course_id, tag_id |
| tb_course_dept | 课程-部门权限表 | 课程访问权限 | id, course_id, dept_id |
## 五、学习管理模块6张表
| 表名 | 中文名 | 说明 | 主要字段 |
|------|--------|------|----------|
| tb_learning_task | 学习任务表 | 学习计划/任务 | id, task_id, name, description, start_time, end_time |
| tb_task_resource | 任务-资源关联表 | 任务关联的资源 | id, task_id, resource_id, required |
| tb_task_course | 任务-课程关联表 | 任务关联的课程 | id, task_id, course_id, required |
| tb_task_user | 任务-用户表 | 任务接收人员及完成情况 | id, task_id, user_id, status, progress |
| tb_learning_record | 学习记录表 | 详细学习记录 | id, user_id, resource_type, resource_id, duration |
| tb_learning_statistics | 学习统计表 | 按天统计学习数据 | id, user_id, stat_date, total_duration, resource_count |
## 六、个人中心模块6张表
| 表名 | 中文名 | 说明 | 主要字段 |
|------|--------|------|----------|
| tb_user_collection | 用户收藏表 | 收藏的资源/课程 | id, user_id, collection_type, collection_id |
| tb_achievement | 成就表 | 勋章/等级定义 | id, achievement_id, name, type, condition_type |
| tb_user_achievement | 用户-成就关联表 | 用户获得的成就 | id, user_id, achievement_id, obtain_time |
| tb_user_points | 用户积分表 | 用户积分和等级 | id, user_id, total_points, current_points, level |
| tb_points_record | 积分记录表 | 积分变动记录 | id, user_id, points, type, source_type |
| tb_user_browse_record | 用户浏览记录表 | 浏览历史 | id, user_id, browse_type, browse_id, browse_time |
## 七、智能体模块6张表
| 表名 | 中文名 | 说明 | 主要字段 |
|------|--------|------|----------|
| tb_ai_agent_config | 智能体配置表 | AI助手配置 | id, name, system_prompt, model_name, temperature |
| tb_ai_knowledge | 知识库表 | AI知识库内容 | id, title, content, source_type, category |
| tb_ai_conversation | 对话会话表 | 对话会话 | id, user_id, title, status, message_count |
| tb_ai_message | 对话消息表 | 对话消息记录 | id, conversation_id, role, content, token_count |
| tb_ai_upload_file | 上传文件表 | 用户上传的文件 | id, user_id, file_name, file_path, extracted_text |
| tb_ai_usage_statistics | AI使用统计表 | AI使用数据统计 | id, user_id, stat_date, conversation_count, total_tokens |
## 八、系统管理模块8张表
| 表名 | 中文名 | 说明 | 主要字段 |
|------|--------|------|----------|
| tb_sys_operation_log | 操作日志表 | 用户操作记录 | id, user_id, module, operation, status, create_time |
| tb_sys_config | 系统配置表 | 系统参数配置 | id, config_key, config_value, config_type, config_group |
| tb_sys_visit_statistics | 访问统计表 | 系统访问数据 | id, stat_date, total_visits, active_users |
| tb_sys_notification | 系统通知表 | 用户通知消息 | id, user_id, type, title, content, is_read |
| tb_sys_file | 文件上传记录表 | 文件管理 | id, file_name, file_path, file_size, module |
| tb_sys_dict_type | 数据字典类型表 | 字典类型定义 | id, dict_type, dict_name, description |
| tb_sys_dict_data | 数据字典详情表 | 字典数据项 | id, dict_type, dict_label, dict_value, dict_sort |
## 数据库统计
- **总表数**: 49张表
- **用户管理**: 3张表
- **权限管理**: 8张表
- **资源管理**: 8张表
- **课程管理**: 4张表
- **学习管理**: 6张表
- **个人中心**: 6张表
- **智能体**: 6张表
- **系统管理**: 8张表
## 表命名规范
- 系统表前缀: `tb_sys_`
- 资源相关: `tb_resource_`
- 课程相关: `tb_course_`
- 学习相关: `tb_learning_``tb_task_`
- 用户相关: `tb_user_`
- AI相关: `tb_ai_`
- 其他业务表: `tb_` + 业务名
## 关联关系类型
- **1对1**: 用户↔用户信息、用户↔积分
- **1对多**: 部门↔子部门、课程↔章节、会话↔消息
- **多对多**: 用户↔角色、资源↔标签、任务↔资源/课程
## 数据存储容量评估
| 表类型 | 预估数据量 | 存储策略 |
|--------|-----------|----------|
| 用户表 | 1万-10万 | 长期保存 |
| 资源表 | 1万-100万 | 长期保存 |
| 课程表 | 100-10000 | 长期保存 |
| 学习记录 | 10万-1000万 | 按年归档 |
| 日志表 | 100万-1亿 | 按月归档 |
| 浏览记录 | 100万-1亿 | 按季度归档 |
| 对话消息 | 10万-1000万 | 按年归档 |
## 性能优化建议
1. **索引优化**:
- 所有外键字段建立索引
- 常用查询条件字段建立索引
- 时间范围查询建立时间索引
2. **分表策略**:
- 日志表按月分表
- 记录表按年分表
- 统计表按天/月预聚合
3. **缓存策略**:
- 系统配置使用Redis缓存
- 热门资源使用缓存
- 用户权限信息缓存
4. **查询优化**:
- 避免全表扫描
- 使用分页查询
- 适当使用冗余字段减少JOIN
5. **数据归档**:
- 定期归档历史日志
- 清理过期的浏览记录
- 备份重要业务数据