表功能增加
This commit is contained in:
288
schoolNewsServ/.bin/mysql/INDEX.md
Normal file
288
schoolNewsServ/.bin/mysql/INDEX.md
Normal file
@@ -0,0 +1,288 @@
|
||||
# 数据库文件索引
|
||||
|
||||
## 📋 文件清单
|
||||
|
||||
### SQL脚本文件
|
||||
|
||||
| 文件名 | 说明 | 表数量 | 执行顺序 |
|
||||
|--------|------|--------|----------|
|
||||
| `sql/createDB.sql` | 创建数据库 | 0 | 1 |
|
||||
| `sql/createTableUser.sql` | 用户管理模块 | 3 | 2 |
|
||||
| `sql/createTablePermission.sql` | 权限管理模块 | 8 | 3 |
|
||||
| `sql/createTableResource.sql` | 资源管理模块 | 8 | 4 |
|
||||
| `sql/createTableCourse.sql` | 课程管理模块 | 4 | 5 |
|
||||
| `sql/createTableLearning.sql` | 学习管理模块 | 6 | 6 |
|
||||
| `sql/createTableUserCenter.sql` | 个人中心模块 | 6 | 7 |
|
||||
| `sql/createTableAI.sql` | 智能体模块 | 6 | 8 |
|
||||
| `sql/createTableSystem.sql` | 系统管理模块 | 8 | 9 |
|
||||
| `sql/initAll.sql` | 一键执行所有SQL | - | - |
|
||||
|
||||
**总计**: 49张表
|
||||
|
||||
### 执行脚本
|
||||
|
||||
| 文件名 | 平台 | 说明 |
|
||||
|--------|------|------|
|
||||
| `init-database.bat` | Windows | Windows批处理脚本 |
|
||||
| `init-database.sh` | Linux/Mac | Shell脚本 |
|
||||
|
||||
### 文档文件
|
||||
|
||||
| 文件名 | 说明 | 推荐阅读 |
|
||||
|--------|------|----------|
|
||||
| `INDEX.md` | 本文件,文件索引 | ⭐⭐⭐ |
|
||||
| `使用说明.md` | 详细使用说明 | ⭐⭐⭐⭐⭐ |
|
||||
| `sql/README.md` | 表结构详细说明 | ⭐⭐⭐⭐⭐ |
|
||||
| `sql/表结构汇总.md` | 表结构汇总列表 | ⭐⭐⭐⭐ |
|
||||
| `sql/ER关系图.md` | 表关系图 | ⭐⭐⭐⭐ |
|
||||
|
||||
## 📁 完整目录结构
|
||||
|
||||
```
|
||||
.bin/mysql/
|
||||
│
|
||||
├── init-database.bat # Windows初始化脚本
|
||||
├── init-database.sh # Linux/Mac初始化脚本
|
||||
├── INDEX.md # 本文件
|
||||
├── 使用说明.md # 使用指南
|
||||
│
|
||||
└── sql/ # SQL脚本目录
|
||||
├── createDB.sql # [1] 创建数据库
|
||||
│
|
||||
├── createTableUser.sql # [2] 用户管理模块
|
||||
│ ├── tb_sys_user # 用户表
|
||||
│ ├── tb_sys_user_info # 用户信息表
|
||||
│ └── tb_sys_login_log # 登录日志表
|
||||
│
|
||||
├── createTablePermission.sql # [3] 权限管理模块
|
||||
│ ├── 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 # 菜单-权限关联表
|
||||
│
|
||||
├── createTableResource.sql # [4] 资源管理模块
|
||||
│ ├── tb_resource # 资源表
|
||||
│ ├── tb_resource_category # 资源分类表
|
||||
│ ├── tb_banner # Banner表
|
||||
│ ├── tb_resource_recommend # 资源推荐表
|
||||
│ ├── tb_tag # 标签表
|
||||
│ ├── tb_resource_tag # 资源-标签关联表
|
||||
│ ├── tb_data_collection_config # 数据采集配置表
|
||||
│ └── tb_data_collection_log # 数据采集记录表
|
||||
│
|
||||
├── createTableCourse.sql # [5] 课程管理模块
|
||||
│ ├── tb_course # 课程表
|
||||
│ ├── tb_course_chapter # 课程章节表
|
||||
│ ├── tb_course_tag # 课程-标签关联表
|
||||
│ └── tb_course_dept # 课程-部门权限表
|
||||
│
|
||||
├── createTableLearning.sql # [6] 学习管理模块
|
||||
│ ├── tb_learning_task # 学习任务表
|
||||
│ ├── tb_task_resource # 任务-资源关联表
|
||||
│ ├── tb_task_course # 任务-课程关联表
|
||||
│ ├── tb_task_user # 任务-用户表
|
||||
│ ├── tb_learning_record # 学习记录表
|
||||
│ └── tb_learning_statistics # 学习统计表
|
||||
│
|
||||
├── createTableUserCenter.sql # [7] 个人中心模块
|
||||
│ ├── tb_user_collection # 用户收藏表
|
||||
│ ├── tb_achievement # 成就表
|
||||
│ ├── tb_user_achievement # 用户-成就关联表
|
||||
│ ├── tb_user_points # 用户积分表
|
||||
│ ├── tb_points_record # 积分记录表
|
||||
│ └── tb_user_browse_record # 用户浏览记录表
|
||||
│
|
||||
├── createTableAI.sql # [8] 智能体模块
|
||||
│ ├── tb_ai_agent_config # 智能体配置表
|
||||
│ ├── tb_ai_knowledge # 知识库表
|
||||
│ ├── tb_ai_conversation # 对话会话表
|
||||
│ ├── tb_ai_message # 对话消息表
|
||||
│ ├── tb_ai_upload_file # 上传文件表
|
||||
│ └── tb_ai_usage_statistics # AI使用统计表
|
||||
│
|
||||
├── createTableSystem.sql # [9] 系统管理模块
|
||||
│ ├── 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 # 数据字典详情表
|
||||
│
|
||||
├── initAll.sql # 一键执行所有SQL
|
||||
├── README.md # 表结构详细说明
|
||||
├── 表结构汇总.md # 表结构汇总
|
||||
└── ER关系图.md # 表关系图
|
||||
```
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### 第一次使用
|
||||
|
||||
1. **阅读使用说明**
|
||||
```
|
||||
打开 使用说明.md
|
||||
```
|
||||
|
||||
2. **执行初始化脚本**
|
||||
|
||||
**Windows:**
|
||||
```cmd
|
||||
双击 init-database.bat
|
||||
```
|
||||
|
||||
**Linux/Mac:**
|
||||
```bash
|
||||
chmod +x init-database.sh
|
||||
./init-database.sh
|
||||
```
|
||||
|
||||
3. **验证安装**
|
||||
```sql
|
||||
USE school_news;
|
||||
SHOW TABLES;
|
||||
```
|
||||
|
||||
### 了解表结构
|
||||
|
||||
1. **快速查看**:阅读 `sql/表结构汇总.md`
|
||||
2. **详细了解**:阅读 `sql/README.md`
|
||||
3. **理解关系**:阅读 `sql/ER关系图.md`
|
||||
|
||||
## 📊 模块说明
|
||||
|
||||
### 1️⃣ 用户管理模块
|
||||
负责用户账号、用户信息和登录日志管理。
|
||||
|
||||
**核心表**:
|
||||
- tb_sys_user (用户表)
|
||||
- tb_sys_user_info (用户信息表)
|
||||
|
||||
### 2️⃣ 权限管理模块
|
||||
实现RBAC权限控制,支持部门、角色、权限、菜单管理。
|
||||
|
||||
**核心表**:
|
||||
- tb_sys_dept (部门表)
|
||||
- tb_sys_role (角色表)
|
||||
- tb_sys_permission (权限表)
|
||||
|
||||
### 3️⃣ 资源管理模块
|
||||
管理新闻资源、分类、标签、推荐和数据采集。
|
||||
|
||||
**核心表**:
|
||||
- tb_resource (资源表)
|
||||
- tb_resource_category (资源分类表)
|
||||
- tb_banner (Banner表)
|
||||
|
||||
### 4️⃣ 课程管理模块
|
||||
管理在线课程、章节、标签和权限。
|
||||
|
||||
**核心表**:
|
||||
- tb_course (课程表)
|
||||
- tb_course_chapter (章节表)
|
||||
|
||||
### 5️⃣ 学习管理模块
|
||||
管理学习任务、学习记录和统计数据。
|
||||
|
||||
**核心表**:
|
||||
- tb_learning_task (学习任务表)
|
||||
- tb_learning_record (学习记录表)
|
||||
- tb_learning_statistics (学习统计表)
|
||||
|
||||
### 6️⃣ 个人中心模块
|
||||
管理用户收藏、成就、积分和浏览记录。
|
||||
|
||||
**核心表**:
|
||||
- tb_user_collection (收藏表)
|
||||
- tb_achievement (成就表)
|
||||
- tb_user_points (积分表)
|
||||
|
||||
### 7️⃣ 智能体模块
|
||||
提供AI对话、知识库和文件问答功能。
|
||||
|
||||
**核心表**:
|
||||
- tb_ai_agent_config (AI配置表)
|
||||
- tb_ai_knowledge (知识库表)
|
||||
- tb_ai_conversation (对话会话表)
|
||||
|
||||
### 8️⃣ 系统管理模块
|
||||
管理系统配置、日志、通知和文件。
|
||||
|
||||
**核心表**:
|
||||
- tb_sys_config (系统配置表)
|
||||
- tb_sys_operation_log (操作日志表)
|
||||
- tb_sys_notification (通知表)
|
||||
|
||||
## 📈 数据量预估
|
||||
|
||||
| 模块 | 预估数据量 | 增长速度 |
|
||||
|------|-----------|----------|
|
||||
| 用户管理 | 1万-10万 | 缓慢 |
|
||||
| 权限管理 | 100-1000 | 缓慢 |
|
||||
| 资源管理 | 1万-100万 | 中等 |
|
||||
| 课程管理 | 100-10000 | 缓慢 |
|
||||
| 学习管理 | 10万-1000万 | 快速 |
|
||||
| 个人中心 | 10万-1000万 | 中等 |
|
||||
| 智能体 | 10万-1000万 | 快速 |
|
||||
| 系统管理 | 100万-1亿 | 快速 |
|
||||
|
||||
## 🔧 维护建议
|
||||
|
||||
### 日常维护
|
||||
- 每天备份数据库
|
||||
- 每周清理过期日志
|
||||
- 每月统计表分析
|
||||
|
||||
### 性能优化
|
||||
- 定期执行 ANALYZE TABLE
|
||||
- 监控慢查询日志
|
||||
- 适时添加索引
|
||||
|
||||
### 数据归档
|
||||
- 登录日志:保留3个月
|
||||
- 操作日志:保留6个月
|
||||
- 学习记录:永久保存
|
||||
- 浏览记录:保留1年
|
||||
|
||||
## 📝 版本信息
|
||||
|
||||
- **版本**: v1.0.0
|
||||
- **发布日期**: 2025-10-15
|
||||
- **数据库**: MySQL 5.7+
|
||||
- **字符集**: utf8mb4
|
||||
- **引擎**: InnoDB
|
||||
|
||||
## 🔗 相关链接
|
||||
|
||||
- [MySQL官方文档](https://dev.mysql.com/doc/)
|
||||
- [数据库设计规范](https://www.cnblogs.com/huchong/p/10219318.html)
|
||||
- [SQL优化指南](https://developer.aliyun.com/article/72501)
|
||||
|
||||
## 📞 技术支持
|
||||
|
||||
如有问题,请检查:
|
||||
1. MySQL版本 >= 5.7
|
||||
2. 字符集为 utf8mb4
|
||||
3. 存储引擎为 InnoDB
|
||||
4. 是否有足够的磁盘空间
|
||||
|
||||
## ⚠️ 注意事项
|
||||
|
||||
1. **首次运行**前,请备份现有数据库
|
||||
2. **生产环境**使用前,请修改默认密码
|
||||
3. **定期备份**数据,防止数据丢失
|
||||
4. **性能监控**,及时发现并解决问题
|
||||
5. **安全加固**,限制数据库访问权限
|
||||
|
||||
## 📅 更新计划
|
||||
|
||||
- [ ] 添加数据字典详细说明
|
||||
- [ ] 补充性能测试报告
|
||||
- [ ] 增加示例数据脚本
|
||||
- [ ] 提供Docker部署方案
|
||||
- [ ] 添加自动化测试用例
|
||||
|
||||
126
schoolNewsServ/.bin/mysql/init-database.bat
Normal file
126
schoolNewsServ/.bin/mysql/init-database.bat
Normal file
@@ -0,0 +1,126 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
echo =====================================================
|
||||
echo 校园思政新闻平台数据库初始化脚本
|
||||
echo =====================================================
|
||||
echo.
|
||||
|
||||
REM 设置MySQL连接信息(请根据实际情况修改)
|
||||
set MYSQL_HOST=localhost
|
||||
set MYSQL_PORT=3306
|
||||
set MYSQL_USER=root
|
||||
set MYSQL_PASSWORD=
|
||||
|
||||
echo 请输入MySQL连接信息:
|
||||
echo.
|
||||
set /p MYSQL_HOST=MySQL主机地址 [默认: localhost]:
|
||||
if "%MYSQL_HOST%"=="" set MYSQL_HOST=localhost
|
||||
|
||||
set /p MYSQL_PORT=MySQL端口 [默认: 3306]:
|
||||
if "%MYSQL_PORT%"=="" set MYSQL_PORT=3306
|
||||
|
||||
set /p MYSQL_USER=MySQL用户名 [默认: root]:
|
||||
if "%MYSQL_USER%"=="" set MYSQL_USER=root
|
||||
|
||||
set /p MYSQL_PASSWORD=MySQL密码:
|
||||
|
||||
echo.
|
||||
echo 连接信息:
|
||||
echo 主机: %MYSQL_HOST%
|
||||
echo 端口: %MYSQL_PORT%
|
||||
echo 用户: %MYSQL_USER%
|
||||
echo.
|
||||
|
||||
echo 开始执行数据库初始化...
|
||||
echo.
|
||||
|
||||
REM 切换到sql目录
|
||||
cd sql
|
||||
|
||||
REM 执行SQL文件
|
||||
echo [1/9] 创建数据库...
|
||||
mysql -h %MYSQL_HOST% -P %MYSQL_PORT% -u %MYSQL_USER% -p%MYSQL_PASSWORD% < createDB.sql
|
||||
if errorlevel 1 (
|
||||
echo 错误: 创建数据库失败!
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo [2/9] 创建用户相关表...
|
||||
mysql -h %MYSQL_HOST% -P %MYSQL_PORT% -u %MYSQL_USER% -p%MYSQL_PASSWORD% < createTableUser.sql
|
||||
if errorlevel 1 (
|
||||
echo 错误: 创建用户表失败!
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo [3/9] 创建权限相关表...
|
||||
mysql -h %MYSQL_HOST% -P %MYSQL_PORT% -u %MYSQL_USER% -p%MYSQL_PASSWORD% < createTablePermission.sql
|
||||
if errorlevel 1 (
|
||||
echo 错误: 创建权限表失败!
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo [4/9] 创建资源管理相关表...
|
||||
mysql -h %MYSQL_HOST% -P %MYSQL_PORT% -u %MYSQL_USER% -p%MYSQL_PASSWORD% < createTableResource.sql
|
||||
if errorlevel 1 (
|
||||
echo 错误: 创建资源表失败!
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo [5/9] 创建课程管理相关表...
|
||||
mysql -h %MYSQL_HOST% -P %MYSQL_PORT% -u %MYSQL_USER% -p%MYSQL_PASSWORD% < createTableCourse.sql
|
||||
if errorlevel 1 (
|
||||
echo 错误: 创建课程表失败!
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo [6/9] 创建学习管理相关表...
|
||||
mysql -h %MYSQL_HOST% -P %MYSQL_PORT% -u %MYSQL_USER% -p%MYSQL_PASSWORD% < createTableLearning.sql
|
||||
if errorlevel 1 (
|
||||
echo 错误: 创建学习表失败!
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo [7/9] 创建个人中心相关表...
|
||||
mysql -h %MYSQL_HOST% -P %MYSQL_PORT% -u %MYSQL_USER% -p%MYSQL_PASSWORD% < createTableUserCenter.sql
|
||||
if errorlevel 1 (
|
||||
echo 错误: 创建个人中心表失败!
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo [8/9] 创建智能体相关表...
|
||||
mysql -h %MYSQL_HOST% -P %MYSQL_PORT% -u %MYSQL_USER% -p%MYSQL_PASSWORD% < createTableAI.sql
|
||||
if errorlevel 1 (
|
||||
echo 错误: 创建智能体表失败!
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo [9/9] 创建系统配置和日志相关表...
|
||||
mysql -h %MYSQL_HOST% -P %MYSQL_PORT% -u %MYSQL_USER% -p%MYSQL_PASSWORD% < createTableSystem.sql
|
||||
if errorlevel 1 (
|
||||
echo 错误: 创建系统表失败!
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
cd ..
|
||||
|
||||
echo.
|
||||
echo =====================================================
|
||||
echo 数据库初始化完成!
|
||||
echo =====================================================
|
||||
echo 数据库名: school_news
|
||||
echo 默认用户: admin
|
||||
echo 默认密码: 详见 createTableUser.sql
|
||||
echo =====================================================
|
||||
echo.
|
||||
|
||||
pause
|
||||
|
||||
81
schoolNewsServ/.bin/mysql/init-database.sh
Normal file
81
schoolNewsServ/.bin/mysql/init-database.sh
Normal file
@@ -0,0 +1,81 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "====================================================="
|
||||
echo "校园思政新闻平台数据库初始化脚本"
|
||||
echo "====================================================="
|
||||
echo ""
|
||||
|
||||
# 设置默认值
|
||||
MYSQL_HOST="localhost"
|
||||
MYSQL_PORT="3306"
|
||||
MYSQL_USER="root"
|
||||
MYSQL_PASSWORD=""
|
||||
|
||||
# 读取用户输入
|
||||
read -p "MySQL主机地址 [默认: localhost]: " input_host
|
||||
MYSQL_HOST=${input_host:-$MYSQL_HOST}
|
||||
|
||||
read -p "MySQL端口 [默认: 3306]: " input_port
|
||||
MYSQL_PORT=${input_port:-$MYSQL_PORT}
|
||||
|
||||
read -p "MySQL用户名 [默认: root]: " input_user
|
||||
MYSQL_USER=${input_user:-$MYSQL_USER}
|
||||
|
||||
read -sp "MySQL密码: " MYSQL_PASSWORD
|
||||
echo ""
|
||||
|
||||
echo ""
|
||||
echo "连接信息:"
|
||||
echo "主机: $MYSQL_HOST"
|
||||
echo "端口: $MYSQL_PORT"
|
||||
echo "用户: $MYSQL_USER"
|
||||
echo ""
|
||||
|
||||
echo "开始执行数据库初始化..."
|
||||
echo ""
|
||||
|
||||
# 切换到sql目录
|
||||
cd sql || exit 1
|
||||
|
||||
# 定义执行SQL的函数
|
||||
execute_sql() {
|
||||
local file=$1
|
||||
local description=$2
|
||||
|
||||
echo "[$description]"
|
||||
|
||||
if [ -z "$MYSQL_PASSWORD" ]; then
|
||||
mysql -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" < "$file"
|
||||
else
|
||||
mysql -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" < "$file"
|
||||
fi
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "错误: $description 失败!"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 执行SQL文件
|
||||
execute_sql "createDB.sql" "1/9 创建数据库"
|
||||
execute_sql "createTableUser.sql" "2/9 创建用户相关表"
|
||||
execute_sql "createTablePermission.sql" "3/9 创建权限相关表"
|
||||
execute_sql "createTableResource.sql" "4/9 创建资源管理相关表"
|
||||
execute_sql "createTableCourse.sql" "5/9 创建课程管理相关表"
|
||||
execute_sql "createTableLearning.sql" "6/9 创建学习管理相关表"
|
||||
execute_sql "createTableUserCenter.sql" "7/9 创建个人中心相关表"
|
||||
execute_sql "createTableAI.sql" "8/9 创建智能体相关表"
|
||||
execute_sql "createTableSystem.sql" "9/9 创建系统配置和日志相关表"
|
||||
|
||||
cd ..
|
||||
|
||||
echo ""
|
||||
echo "====================================================="
|
||||
echo "数据库初始化完成!"
|
||||
echo "====================================================="
|
||||
echo "数据库名: school_news"
|
||||
echo "默认用户: admin"
|
||||
echo "默认密码: 详见 createTableUser.sql"
|
||||
echo "====================================================="
|
||||
echo ""
|
||||
|
||||
290
schoolNewsServ/.bin/mysql/sql/ER关系图.md
Normal file
290
schoolNewsServ/.bin/mysql/sql/ER关系图.md
Normal 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. **关联查询优化**
|
||||
- 用户权限查询:缓存权限信息
|
||||
- 任务详情查询:适当冗余字段
|
||||
- 资源推荐查询:使用物化视图
|
||||
|
||||
242
schoolNewsServ/.bin/mysql/sql/README.md
Normal file
242
schoolNewsServ/.bin/mysql/sql/README.md
Normal 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)
|
||||
- 资源 → 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. **多租户**:添加租户相关表和字段
|
||||
|
||||
126
schoolNewsServ/.bin/mysql/sql/createTableAI.sql
Normal file
126
schoolNewsServ/.bin/mysql/sql/createTableAI.sql
Normal 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 '关联文件ID(JSON数组)',
|
||||
`knowledge_ids` VARCHAR(500) DEFAULT NULL COMMENT '引用知识ID(JSON数组)',
|
||||
`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使用统计表';
|
||||
|
||||
63
schoolNewsServ/.bin/mysql/sql/createTableCourse.sql
Normal file
63
schoolNewsServ/.bin/mysql/sql/createTableCourse.sql
Normal 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='课程标签关联表';
|
||||
|
||||
115
schoolNewsServ/.bin/mysql/sql/createTableLearning.sql
Normal file
115
schoolNewsServ/.bin/mysql/sql/createTableLearning.sql
Normal 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='学习统计表';
|
||||
|
||||
@@ -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 '部门ID(NULL表示不限制部门)',
|
||||
`role_id` VARCHAR(50) DEFAULT NULL COMMENT '角色ID(NULL表示不限制角色)',
|
||||
`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为NULL,role_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;
|
||||
|
||||
172
schoolNewsServ/.bin/mysql/sql/createTableResource.sql
Normal file
172
schoolNewsServ/.bin/mysql/sql/createTableResource.sql
Normal 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='数据采集记录表';
|
||||
|
||||
167
schoolNewsServ/.bin/mysql/sql/createTableSystem.sql
Normal file
167
schoolNewsServ/.bin/mysql/sql/createTableSystem.sql
Normal 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='字典数据表';
|
||||
|
||||
101
schoolNewsServ/.bin/mysql/sql/createTableUserCenter.sql
Normal file
101
schoolNewsServ/.bin/mysql/sql/createTableUserCenter.sql
Normal 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='用户浏览记录表';
|
||||
|
||||
45
schoolNewsServ/.bin/mysql/sql/initAll.sql
Normal file
45
schoolNewsServ/.bin/mysql/sql/initAll.sql
Normal 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)
|
||||
-- =====================================================
|
||||
|
||||
395
schoolNewsServ/.bin/mysql/sql/权限控制使用说明.md
Normal file
395
schoolNewsServ/.bin/mysql/sql/权限控制使用说明.md
Normal 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`: 学习任务表
|
||||
|
||||
157
schoolNewsServ/.bin/mysql/sql/表结构汇总.md
Normal file
157
schoolNewsServ/.bin/mysql/sql/表结构汇总.md
Normal 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. **数据归档**:
|
||||
- 定期归档历史日志
|
||||
- 清理过期的浏览记录
|
||||
- 备份重要业务数据
|
||||
|
||||
393
schoolNewsServ/.bin/mysql/使用说明.md
Normal file
393
schoolNewsServ/.bin/mysql/使用说明.md
Normal file
@@ -0,0 +1,393 @@
|
||||
# 数据库初始化使用说明
|
||||
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
.bin/mysql/
|
||||
├── init-database.bat # Windows批处理脚本
|
||||
├── init-database.sh # Linux/Mac Shell脚本
|
||||
├── 使用说明.md # 本文件
|
||||
└── sql/
|
||||
├── createDB.sql # 创建数据库
|
||||
├── createTableUser.sql # 用户相关表
|
||||
├── createTablePermission.sql # 权限相关表
|
||||
├── createTableResource.sql # 资源管理相关表
|
||||
├── createTableCourse.sql # 课程管理相关表
|
||||
├── createTableLearning.sql # 学习管理相关表
|
||||
├── createTableUserCenter.sql # 个人中心相关表
|
||||
├── createTableAI.sql # 智能体相关表
|
||||
├── createTableSystem.sql # 系统配置和日志相关表
|
||||
├── initAll.sql # 一键执行所有SQL
|
||||
├── README.md # 表结构详细说明
|
||||
├── 表结构汇总.md # 表结构汇总
|
||||
└── ER关系图.md # ER关系图
|
||||
```
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 方法一:使用自动化脚本(推荐)
|
||||
|
||||
#### Windows环境
|
||||
|
||||
1. 确保已安装MySQL,并且MySQL命令行工具在系统PATH中
|
||||
2. 双击运行 `init-database.bat`
|
||||
3. 按提示输入MySQL连接信息
|
||||
4. 等待初始化完成
|
||||
|
||||
#### Linux/Mac环境
|
||||
|
||||
1. 确保已安装MySQL客户端
|
||||
2. 给脚本添加执行权限:
|
||||
```bash
|
||||
chmod +x init-database.sh
|
||||
```
|
||||
3. 运行脚本:
|
||||
```bash
|
||||
./init-database.sh
|
||||
```
|
||||
4. 按提示输入MySQL连接信息
|
||||
5. 等待初始化完成
|
||||
|
||||
### 方法二:使用MySQL命令行
|
||||
|
||||
#### 连接到MySQL
|
||||
|
||||
```bash
|
||||
mysql -u root -p
|
||||
```
|
||||
|
||||
#### 执行初始化脚本
|
||||
|
||||
```sql
|
||||
SOURCE /path/to/.bin/mysql/sql/initAll.sql;
|
||||
```
|
||||
|
||||
或者在命令行中执行:
|
||||
|
||||
```bash
|
||||
cd .bin/mysql/sql
|
||||
mysql -u root -p < createDB.sql
|
||||
mysql -u root -p < createTableUser.sql
|
||||
mysql -u root -p < createTablePermission.sql
|
||||
mysql -u root -p < createTableResource.sql
|
||||
mysql -u root -p < createTableCourse.sql
|
||||
mysql -u root -p < createTableLearning.sql
|
||||
mysql -u root -p < createTableUserCenter.sql
|
||||
mysql -u root -p < createTableAI.sql
|
||||
mysql -u root -p < createTableSystem.sql
|
||||
```
|
||||
|
||||
### 方法三:使用数据库管理工具
|
||||
|
||||
使用 Navicat、DBeaver、phpMyAdmin 等数据库管理工具:
|
||||
|
||||
1. 连接到MySQL服务器
|
||||
2. 依次执行以下SQL文件:
|
||||
- createDB.sql
|
||||
- createTableUser.sql
|
||||
- createTablePermission.sql
|
||||
- createTableResource.sql
|
||||
- createTableCourse.sql
|
||||
- createTableLearning.sql
|
||||
- createTableUserCenter.sql
|
||||
- createTableAI.sql
|
||||
- createTableSystem.sql
|
||||
|
||||
## 初始化后的验证
|
||||
|
||||
### 检查数据库是否创建成功
|
||||
|
||||
```sql
|
||||
SHOW DATABASES LIKE 'school_news';
|
||||
```
|
||||
|
||||
### 检查表是否创建成功
|
||||
|
||||
```sql
|
||||
USE school_news;
|
||||
SHOW TABLES;
|
||||
```
|
||||
|
||||
应该看到约49张表。
|
||||
|
||||
### 检查默认数据是否插入成功
|
||||
|
||||
```sql
|
||||
-- 检查默认用户
|
||||
SELECT * FROM tb_sys_user;
|
||||
|
||||
-- 检查默认部门
|
||||
SELECT * FROM tb_sys_dept;
|
||||
|
||||
-- 检查默认角色
|
||||
SELECT * FROM tb_sys_role;
|
||||
|
||||
-- 检查默认权限
|
||||
SELECT * FROM tb_sys_permission;
|
||||
|
||||
-- 检查默认菜单
|
||||
SELECT * FROM tb_sys_menu;
|
||||
|
||||
-- 检查资源分类
|
||||
SELECT * FROM tb_resource_category;
|
||||
|
||||
-- 检查系统配置
|
||||
SELECT * FROM tb_sys_config;
|
||||
|
||||
-- 检查AI配置
|
||||
SELECT * FROM tb_ai_agent_config;
|
||||
```
|
||||
|
||||
## 默认账号信息
|
||||
|
||||
### 管理员账号
|
||||
|
||||
- **用户名**: admin
|
||||
- **密码**: 对应的bcrypt哈希值已在SQL中,原始密码请查看 createTableUser.sql 文件
|
||||
- **邮箱**: 3223905473@qq.com
|
||||
- **角色**: 管理员
|
||||
- **部门**: 超级部门
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Q1: 执行脚本时提示 "Access denied"
|
||||
|
||||
**原因**: MySQL用户权限不足
|
||||
|
||||
**解决方案**:
|
||||
1. 确保使用的MySQL账号有创建数据库和表的权限
|
||||
2. 使用root账号或具有足够权限的账号
|
||||
|
||||
### Q2: 执行脚本时提示 "Table already exists"
|
||||
|
||||
**原因**: 表已存在
|
||||
|
||||
**解决方案**:
|
||||
1. 如果要重新初始化,先删除数据库:
|
||||
```sql
|
||||
DROP DATABASE IF EXISTS school_news;
|
||||
```
|
||||
2. 然后重新执行初始化脚本
|
||||
|
||||
### Q3: 中文乱码问题
|
||||
|
||||
**原因**: 字符集配置问题
|
||||
|
||||
**解决方案**:
|
||||
1. 确保MySQL服务器配置了UTF-8字符集
|
||||
2. 在my.cnf或my.ini中添加:
|
||||
```ini
|
||||
[client]
|
||||
default-character-set=utf8mb4
|
||||
|
||||
[mysql]
|
||||
default-character-set=utf8mb4
|
||||
|
||||
[mysqld]
|
||||
character-set-server=utf8mb4
|
||||
collation-server=utf8mb4_general_ci
|
||||
```
|
||||
3. 重启MySQL服务
|
||||
|
||||
### Q4: Windows脚本执行时中文显示乱码
|
||||
|
||||
**原因**: 命令行编码问题
|
||||
|
||||
**解决方案**:
|
||||
1. 脚本已包含 `chcp 65001` 命令切换为UTF-8编码
|
||||
2. 如果仍有问题,可以在命令行中手动执行:
|
||||
```cmd
|
||||
chcp 65001
|
||||
```
|
||||
|
||||
### Q5: Linux脚本没有执行权限
|
||||
|
||||
**原因**: 文件权限问题
|
||||
|
||||
**解决方案**:
|
||||
```bash
|
||||
chmod +x init-database.sh
|
||||
```
|
||||
|
||||
### Q6: 执行时提示 "mysql: command not found"
|
||||
|
||||
**原因**: MySQL客户端未安装或不在PATH中
|
||||
|
||||
**解决方案**:
|
||||
|
||||
**Windows**:
|
||||
1. 将MySQL的bin目录添加到系统PATH
|
||||
2. 或使用完整路径执行,例如:
|
||||
```cmd
|
||||
"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" -u root -p
|
||||
```
|
||||
|
||||
**Linux/Mac**:
|
||||
1. 安装MySQL客户端:
|
||||
```bash
|
||||
# Ubuntu/Debian
|
||||
sudo apt-get install mysql-client
|
||||
|
||||
# CentOS/RHEL
|
||||
sudo yum install mysql
|
||||
|
||||
# Mac
|
||||
brew install mysql-client
|
||||
```
|
||||
|
||||
## 数据库连接配置
|
||||
|
||||
### JDBC连接字符串
|
||||
|
||||
```
|
||||
jdbc:mysql://localhost:3306/school_news?useUnicode=true&characterEncoding=utf8mb4&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
|
||||
```
|
||||
|
||||
### 配置参数说明
|
||||
|
||||
- `useUnicode=true`: 使用Unicode字符集
|
||||
- `characterEncoding=utf8mb4`: 使用UTF-8编码,支持表情符号
|
||||
- `useSSL=false`: 禁用SSL(开发环境)
|
||||
- `serverTimezone=Asia/Shanghai`: 设置时区
|
||||
- `allowPublicKeyRetrieval=true`: 允许客户端从服务器获取公钥
|
||||
|
||||
## 备份与恢复
|
||||
|
||||
### 备份数据库
|
||||
|
||||
```bash
|
||||
mysqldump -u root -p school_news > school_news_backup.sql
|
||||
```
|
||||
|
||||
### 恢复数据库
|
||||
|
||||
```bash
|
||||
mysql -u root -p school_news < school_news_backup.sql
|
||||
```
|
||||
|
||||
### 备份单个表
|
||||
|
||||
```bash
|
||||
mysqldump -u root -p school_news tb_sys_user > user_backup.sql
|
||||
```
|
||||
|
||||
## 性能优化建议
|
||||
|
||||
### 1. 配置MySQL参数
|
||||
|
||||
在 my.cnf 或 my.ini 中:
|
||||
|
||||
```ini
|
||||
[mysqld]
|
||||
# InnoDB缓冲池大小(建议设置为服务器内存的50-80%)
|
||||
innodb_buffer_pool_size = 1G
|
||||
|
||||
# 连接数
|
||||
max_connections = 500
|
||||
|
||||
# 查询缓存(MySQL 8.0已移除)
|
||||
# query_cache_size = 64M
|
||||
|
||||
# 日志
|
||||
slow_query_log = 1
|
||||
slow_query_log_file = /var/log/mysql/slow.log
|
||||
long_query_time = 2
|
||||
```
|
||||
|
||||
### 2. 定期维护
|
||||
|
||||
```sql
|
||||
-- 分析表
|
||||
ANALYZE TABLE tb_resource;
|
||||
|
||||
-- 优化表
|
||||
OPTIMIZE TABLE tb_learning_record;
|
||||
|
||||
-- 修复表
|
||||
REPAIR TABLE tb_sys_user;
|
||||
```
|
||||
|
||||
### 3. 监控慢查询
|
||||
|
||||
```sql
|
||||
-- 查看慢查询日志
|
||||
SHOW VARIABLES LIKE 'slow_query_log%';
|
||||
|
||||
-- 查看长时间查询
|
||||
SHOW PROCESSLIST;
|
||||
```
|
||||
|
||||
## 数据迁移
|
||||
|
||||
### 从测试环境迁移到生产环境
|
||||
|
||||
1. **导出测试环境数据**
|
||||
```bash
|
||||
mysqldump -u root -p --single-transaction --quick school_news > school_news_test.sql
|
||||
```
|
||||
|
||||
2. **在生产环境创建数据库**
|
||||
```bash
|
||||
mysql -u root -p < createDB.sql
|
||||
```
|
||||
|
||||
3. **导入数据**
|
||||
```bash
|
||||
mysql -u root -p school_news < school_news_test.sql
|
||||
```
|
||||
|
||||
4. **验证数据**
|
||||
```sql
|
||||
USE school_news;
|
||||
SELECT COUNT(*) FROM tb_sys_user;
|
||||
-- 验证其他关键表
|
||||
```
|
||||
|
||||
## 开发规范
|
||||
|
||||
### 1. 表命名规范
|
||||
- 系统表:`tb_sys_` 前缀
|
||||
- 业务表:`tb_` + 业务名
|
||||
- 关联表:`tb_` + 表名1 + `_` + 表名2
|
||||
|
||||
### 2. 字段命名规范
|
||||
- 使用小写字母和下划线
|
||||
- 主键统一使用 `id`
|
||||
- 外键使用 `表名_id`
|
||||
- 布尔值使用 `is_` 前缀
|
||||
- 时间字段使用 `_time` 后缀
|
||||
|
||||
### 3. 索引命名规范
|
||||
- 主键:`pk_表名`(默认)
|
||||
- 唯一索引:`uk_字段名`
|
||||
- 普通索引:`idx_字段名`
|
||||
- 组合索引:`idx_字段1_字段2`
|
||||
|
||||
### 4. 注释规范
|
||||
- 所有表必须有注释
|
||||
- 所有字段必须有注释
|
||||
- 注释使用中文,简洁明了
|
||||
|
||||
## 文档说明
|
||||
|
||||
- **README.md**: 详细的表结构说明文档
|
||||
- **表结构汇总.md**: 所有表的汇总列表
|
||||
- **ER关系图.md**: 表关系图(Mermaid格式)
|
||||
- **使用说明.md**: 本文件,使用指南
|
||||
|
||||
## 技术支持
|
||||
|
||||
如遇到问题,请检查:
|
||||
1. MySQL版本是否为5.7或更高
|
||||
2. 字符集是否为utf8mb4
|
||||
3. 是否有足够的权限
|
||||
4. SQL文件是否完整
|
||||
|
||||
## 更新日志
|
||||
|
||||
### v1.0.0 (2025-10-15)
|
||||
- 初始版本
|
||||
- 创建49张表
|
||||
- 包含8个功能模块
|
||||
- 添加默认数据和配置
|
||||
|
||||
Reference in New Issue
Block a user