# 校园思政新闻平台数据库表结构说明

## 数据库初始化顺序

按照以下顺序执行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）
   - 资源 → Banner（1对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`: 主键ID（VARCHAR(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. **多租户**：添加租户相关表和字段

