镜像制作

This commit is contained in:
2025-11-24 11:50:15 +08:00
parent 12592c5a24
commit 07bd166257
53 changed files with 3822 additions and 2140 deletions

View File

@@ -1,288 +0,0 @@
# 数据库文件索引
## 📋 文件清单
### 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部署方案
- [ ] 添加自动化测试用例

View File

@@ -1,72 +0,0 @@
#!/bin/bash
echo "====================================================="
echo "校园思政新闻平台数据库初始化脚本"
echo "====================================================="
echo ""
# 设置默认值
MYSQL_HOST="localhost"
MYSQL_PORT="3306"
MYSQL_USER="root"
MYSQL_PASSWORD="123456"
# 读取用户输入
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密码[默认: 123456]: " input_password
MYSQL_PASSWORD=${input_password:-$MYSQL_PASSWORD}
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 ""

View File

@@ -14,12 +14,12 @@ YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 数据库配置
DB_HOST="localhost"
DB_PORT="3306"
DB_USER="root"
DB_PASSWORD="123456"
DB_NAME="school_news"
# 数据库配置(优先使用环境变量)
DB_HOST="${DB_HOST:-localhost}"
DB_PORT="${DB_PORT:-3306}"
DB_USER="${DB_USER:-root}"
DB_PASSWORD="${DB_PASSWORD:-123456}"
DB_NAME="${DB_NAME:-school_news}"
# 脚本目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -101,19 +101,6 @@ execute_init_script() {
import_sensitive_words() {
print_message $BLUE "开始导入敏感词数据..."
# 检查conda是否可用
if ! command -v conda &> /dev/null; then
print_message $YELLOW "conda命令未找到跳过敏感词导入"
return 0
fi
# 检查schoolNewsCrawler环境是否存在
if ! conda env list | grep -q "schoolNewsCrawler"; then
print_message $YELLOW "conda环境 'schoolNewsCrawler' 不存在,跳过敏感词导入"
print_message $YELLOW "提示: 可以使用以下命令创建环境: conda create -n schoolNewsCrawler python=3.10"
return 0
fi
# 切换到敏感词脚本目录
local sensitive_dir="$SCRIPT_DIR/sensitiveData"
if [ ! -d "$sensitive_dir" ]; then
@@ -121,25 +108,63 @@ import_sensitive_words() {
return 0
fi
if [ ! -f "$sensitive_dir/writeWord.py" ]; then
print_message $YELLOW "敏感词脚本不存在: $sensitive_dir/writeWord.py"
# 检查Shell脚本是否存在
if [ -f "$sensitive_dir/importSensitiveWords.sh" ]; then
print_message $BLUE "使用Shell脚本导入敏感词"
cd "$sensitive_dir"
# 导出数据库配置环境变量
export DB_HOST="$DB_HOST"
export DB_PORT="$DB_PORT"
export DB_USER="$DB_USER"
export DB_PASSWORD="$DB_PASSWORD"
export DB_NAME="$DB_NAME"
export AUTO_CONFIRM=true
bash importSensitiveWords.sh -y
if [ $? -eq 0 ]; then
print_message $GREEN "敏感词数据导入成功"
else
print_message $YELLOW "敏感词数据导入失败,但不影响系统运行"
fi
cd "$SCRIPT_DIR"
return 0
fi
print_message $BLUE "激活conda环境: schoolNewsCrawler"
cd "$sensitive_dir"
# 使用conda run来在指定环境中执行命令添加-y参数自动确认
conda run -n schoolNewsCrawler python writeWord.py -y
if [ $? -eq 0 ]; then
print_message $GREEN "敏感词数据导入成功"
else
print_message $YELLOW "敏感词数据导入失败,但不影响系统运行"
# 兼容旧的Python脚本如果Shell脚本不存在
if [ -f "$sensitive_dir/writeWord.py" ]; then
print_message $YELLOW "使用Python脚本导入敏感词建议使用Shell版本"
# 检查conda是否可用
if ! command -v conda &> /dev/null; then
print_message $YELLOW "conda命令未找到跳过敏感词导入"
return 0
fi
# 检查schoolNewsCrawler环境是否存在
if ! conda env list | grep -q "schoolNewsCrawler"; then
print_message $YELLOW "conda环境 'schoolNewsCrawler' 不存在,跳过敏感词导入"
return 0
fi
cd "$sensitive_dir"
conda run -n schoolNewsCrawler python writeWord.py -y
if [ $? -eq 0 ]; then
print_message $GREEN "敏感词数据导入成功"
else
print_message $YELLOW "敏感词数据导入失败,但不影响系统运行"
fi
cd "$SCRIPT_DIR"
return 0
fi
# 返回脚本目录
cd "$SCRIPT_DIR"
# 如果两个脚本都不存在
print_message $YELLOW "敏感词导入脚本不存在,跳过导入"
print_message $YELLOW "提示: 可以使用 importSensitiveWords.sh (推荐) 或 writeWord.py"
}
# 验证初始化结果

View File

@@ -0,0 +1,182 @@
#!/bin/bash
##############################################
# 敏感词批量导入脚本 (纯Shell实现)
# 功能:从 sensitive_word_dict.txt 读取敏感词并导入数据库
# 优势不需要Python环境只需要MySQL客户端
##############################################
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 数据库配置
DB_HOST="${DB_HOST:-localhost}"
DB_PORT="${DB_PORT:-3306}"
DB_USER="${DB_USER:-root}"
DB_PASSWORD="${DB_PASSWORD:-123456}"
DB_NAME="${DB_NAME:-school_news}"
# 脚本目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
DICT_FILE="${SCRIPT_DIR}/sensitive_word_dict.txt"
echo "=================================================="
echo "敏感词批量导入工具 (Shell版本)"
echo "=================================================="
log_info "数据库: ${DB_HOST}:${DB_PORT}/${DB_NAME}"
log_info "敏感词文件: ${DICT_FILE}"
echo "=================================================="
echo ""
# 检查敏感词文件
if [ ! -f "${DICT_FILE}" ]; then
log_error "敏感词文件不存在: ${DICT_FILE}"
exit 1
fi
# 统计敏感词数量
TOTAL_WORDS=$(grep -v '^$' "${DICT_FILE}" | wc -l)
log_info "检测到 ${TOTAL_WORDS} 个敏感词"
if [ ${TOTAL_WORDS} -eq 0 ]; then
log_warn "敏感词文件为空"
exit 0
fi
# 检查MySQL连接
log_info "检查数据库连接..."
if ! mysql -h"${DB_HOST}" -P"${DB_PORT}" -u"${DB_USER}" -p"${DB_PASSWORD}" -e "SELECT 1;" &>/dev/null; then
log_error "数据库连接失败"
exit 1
fi
log_info "数据库连接成功"
echo ""
# 确认导入
log_warn "准备导入 ${TOTAL_WORDS} 个敏感词到数据库"
log_warn "这将清除现有的 deny 类型敏感词"
echo ""
# 检查是否是自动模式(通过 -y 参数或环境变量)
AUTO_CONFIRM=${AUTO_CONFIRM:-false}
if [ "$1" = "-y" ] || [ "$1" = "--yes" ] || [ "${AUTO_CONFIRM}" = "true" ]; then
log_info "自动确认模式,开始导入..."
else
read -p "是否继续?(y/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
log_warn "用户取消导入"
exit 0
fi
fi
echo ""
# 开始导入
log_info "开始导入敏感词..."
START_TIME=$(date +%s)
# 创建临时SQL文件
TEMP_SQL=$(mktemp)
trap "rm -f ${TEMP_SQL}" EXIT
# 生成SQL语句
log_info "生成SQL语句..."
cat > "${TEMP_SQL}" <<EOF
-- 敏感词批量导入
USE ${DB_NAME};
-- 设置字符集
SET NAMES utf8mb4;
-- 清除现有的deny类型敏感词
DELETE FROM tb_sensitive_word WHERE type = 'deny';
-- 批量插入敏感词
INSERT INTO tb_sensitive_word (word, type) VALUES
EOF
# 读取敏感词并生成INSERT语句
COUNTER=0
while IFS= read -r word || [ -n "$word" ]; do
# 跳过空行
[ -z "$word" ] && continue
# 转义单引号
word=$(echo "$word" | sed "s/'/''/g")
COUNTER=$((COUNTER + 1))
# 添加到SQL最后一个不加逗号
if [ $COUNTER -eq ${TOTAL_WORDS} ]; then
echo "('${word}', 'deny');" >> "${TEMP_SQL}"
else
echo "('${word}', 'deny')," >> "${TEMP_SQL}"
fi
# 进度提示每1000个
if [ $((COUNTER % 1000)) -eq 0 ]; then
log_info "已处理 ${COUNTER}/${TOTAL_WORDS} 个敏感词..."
fi
done < "${DICT_FILE}"
# 添加查询语句
cat >> "${TEMP_SQL}" <<EOF
-- 验证导入结果
SELECT COUNT(*) AS '导入数量' FROM tb_sensitive_word WHERE type = 'deny';
EOF
log_info "SQL语句生成完成${COUNTER}个敏感词)"
echo ""
# 执行SQL
log_info "执行数据库导入..."
if mysql -h"${DB_HOST}" -P"${DB_PORT}" -u"${DB_USER}" -p"${DB_PASSWORD}" < "${TEMP_SQL}"; then
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
echo ""
echo "=================================================="
log_info "导入完成!"
log_info "成功导入: ${COUNTER} 个敏感词"
log_info "耗时: ${DURATION}"
echo "=================================================="
else
log_error "数据库导入失败"
exit 1
fi
# 验证结果
log_info "验证导入结果..."
IMPORTED_COUNT=$(mysql -h"${DB_HOST}" -P"${DB_PORT}" -u"${DB_USER}" -p"${DB_PASSWORD}" -D"${DB_NAME}" -sNe \
"SELECT COUNT(*) FROM tb_sensitive_word WHERE type = 'deny';")
echo ""
log_info "数据库中当前有 ${IMPORTED_COUNT} 个 deny 类型敏感词"
if [ "${IMPORTED_COUNT}" -eq "${COUNTER}" ]; then
log_info "✅ 验证通过:导入数量与预期一致"
else
log_warn "⚠️ 导入数量不匹配:预期 ${COUNTER},实际 ${IMPORTED_COUNT}"
fi
echo ""
log_info "敏感词导入完成!"

View File

@@ -1,393 +0,0 @@
# 数据库初始化使用说明
## 目录结构
```
.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个功能模块
- 添加默认数据和配置