# 一、基于SpringBoot框架的高考志愿辅助填报系统-数据库设计报告
|文件状态:
[ ] 草稿
[ ] 正式发布
[ ] 正在修改|文件标识:||
|---|---|---|
||当前版本:||
||作 者:||
||完成日期:||
重庆工程学院
Chongqing Institute of Engineering
## 版本历史
|版本/状态|作者|参与者|起止日期|备注|
|---|---|---|---|---|
|1.0|||||
||||||
||||||
||||||
## 目录
1. [文档介绍](#0-文档介绍)
2. [数据库环境说明](#1-数据库环境说明)
3. [数据库命名规则](#2-数据库命名规则)
4. [概念及逻辑设计](#3-概念及逻辑设计)
5. [物理设计](#4-物理设计)
6. [安全性设计](#5-安全性设计)
7. [性能优化方法](#6-性能优化方法)
8. [数据库管理与维护说明](#7-数据库管理与维护说明)
## 0. 文档介绍
## 0.1 文档目的
本份是基于SpringBoot框架的高考志愿辅助填报系统的数据库设计说明,主要用于说明数据库环境、命名规则、逻辑、物理设计以及数据库的安全性设计和数据库管理和维护说明。
## 0.2 文档范围
包括数据库环境、命名规则、逻辑、物理设计以及数据库的安全性设计和数据库管理和维护说明。
## 0.3 读者对象
项目管理员、用户以及开发人员、测试人员。
## 0.4 参考文档
无
## 0.5 术语与缩写解释
|缩写、术语|解 释|
|---|---|
|||
|||
|||
|||
## 1. 数据库环境说明
1.1 数据库系统:MySQL 8.0+
1.2 设计工具:Enterprise Architect、Navicat Premium 15
## 2. 数据库命名规则
- 避免使用常用的名称空间中类型名称,如class。
- 避免使用常用关键词有冲突的标识符,如order。
- 采取加前缀组合方式。
- 属性用名词或名词短语命名属性。
## 3. 概念及逻辑设计
## 3.1. E-R图
```mermaid
erDiagram
sys_user ||--o{ biz_volunteer_plan : "创建"
biz_volunteer_plan ||--|{ biz_plan_item : "包含"
base_university ||--|{ biz_admission_data : "关联"
base_major ||--|{ biz_admission_data : "关联"
sys_user {
string username
string password
int score
int rank
}
biz_volunteer_plan {
bigint id
bigint user_id
string plan_name
datetime create_time
}
biz_plan_item {
bigint id
bigint plan_id
bigint uni_id
string uni_name
string major_name
int sort_order
}
```
## 3.2. 逻辑设计
本系统数据库设计遵循第三范式(3NF),确保数据结构合理,减少冗余。
主要关系模式如下:
1. **用户相关**:用户(User)通过用户角色关联表(UserRole)与角色(Role)呈多对多关系。
2. **志愿相关**:用户(User)与志愿方案(Plan)呈一对多关系;志愿方案(Plan)与志愿明细(Item)呈一对多关系。
3. **数据相关**:院校(University)和专业(Major)通过录取数据表(AdmissionData)关联,形成不同年份的录取分数记录。
## 4. 物理设计
## 4.1. 表汇总
|数据表|名称|
|---|---|
|sys_user|系统用户表|
|sys_role|系统角色表|
|sys_user_role|用户角色关联表|
|base_university|院校基础信息表|
|base_major|专业基础信息表|
|biz_admission_data|历年录取数据表|
|biz_score_segment|一分一段表|
|biz_volunteer_plan|用户志愿模拟方案表|
|biz_plan_item|志愿方案明细表|
## 4.2. XXX表
### 4.2.1 sys_user (系统用户表)
|字段名|类型|长度|是否主键|允许空|说明|
|---|---|---|---|---|---|
|id|bigint|20|Y|N|主键ID|
|username|varchar|50|N|N|用户名/学号|
|password|varchar|100|N|N|加密密码|
|real_name|varchar|50|N|Y|真实姓名|
|score|int|11|N|Y|高考分数|
|rank|int|11|N|Y|全省位次|
|province|varchar|20|N|Y|考生省份|
|subject_type|varchar|10|N|Y|科类(物理/历史)|
|create_time|datetime||N|N|创建时间|
### 4.2.2 base_university (院校基础信息表)
|字段名|类型|长度|是否主键|允许空|说明|
|---|---|---|---|---|---|
|id|bigint|20|Y|N|主键ID|
|code|varchar|20|N|N|院校代码|
|name|varchar|100|N|N|院校名称|
|level|varchar|20|N|Y|办学层次(本科/专科)|
|tags|varchar|200|N|Y|标签(985/211/双一流)|
|location|varchar|50|N|Y|所在地|
### 4.2.3 biz_admission_data (录取数据表)
|字段名|类型|长度|是否主键|允许空|说明|
|---|---|---|---|---|---|
|id|bigint|20|Y|N|主键ID|
|year|int|4|N|N|年份|
|uni_id|bigint|20|N|N|院校ID|
|major_name|varchar|100|N|N|专业名称|
|min_score|int|11|N|N|最低分|
|min_rank|int|11|N|N|最低位次|
### 4.2.4 biz_volunteer_plan (用户志愿模拟方案表)
|字段名|类型|长度|是否主键|允许空|说明|
|---|---|---|---|---|---|
|id|bigint|20|Y|N|主键ID|
|user_id|bigint|20|N|N|用户ID|
|plan_name|varchar|50|N|N|方案名称|
|risk_level|int|2|N|Y|总体风险等级|
|create_time|datetime||N|N|创建时间|
### 4.2.5 biz_plan_item (志愿方案明细表)
|字段名|类型|长度|是否主键|允许空|说明|
|---|---|---|---|---|---|
|id|bigint|20|Y|N|主键ID|
|plan_id|bigint|20|N|N|方案ID|
|uni_id|bigint|20|N|N|院校ID|
|major_name|varchar|100|N|N|专业名称|
|prob_rate|int|4|N|Y|录取概率(%)|
|sort_order|int|4|N|N|志愿顺序|
### 4.2.6 sys_role (系统角色表)
|字段名|类型|长度|是否主键|允许空|说明|
|---|---|---|---|---|---|
|id|bigint|20|Y|N|主键ID|
|role_name|varchar|50|N|N|角色名称|
|role_code|varchar|50|N|N|角色编码|
|description|varchar|200|N|Y|描述|
### 4.2.7 sys_user_role (用户角色关联表)
|字段名|类型|长度|是否主键|允许空|说明|
|---|---|---|---|---|---|
|id|bigint|20|Y|N|主键ID|
|user_id|bigint|20|N|N|用户ID|
|role_id|bigint|20|N|N|角色ID|
### 4.2.8 base_major (专业基础信息表)
|字段名|类型|长度|是否主键|允许空|说明|
|---|---|---|---|---|---|
|id|bigint|20|Y|N|主键ID|
|code|varchar|20|N|N|专业代码|
|name|varchar|100|N|N|专业名称|
|category|varchar|50|N|Y|学科门类|
|degree|varchar|20|N|Y|授予学位|
### 4.2.9 biz_score_segment (一分一段表)
|字段名|类型|长度|是否主键|允许空|说明|
|---|---|---|---|---|---|
|id|bigint|20|Y|N|主键ID|
|year|int|4|N|N|年份|
|province|varchar|20|N|N|省份|
|score|int|11|N|N|分数|
|count|int|11|N|N|同分人数|
|ranking|int|11|N|N|累计位次|
## 5. 安全性设计
## 5.1. 帐号与密码管理
1. **账号唯一性**:`sys_user` 表中 `username` 字段设置唯一索引,防止重复注册。
2. **密码复杂度**:前端校验密码强度(长度、字符组合),后端再次校验。
3. **敏感信息脱敏**:用户身份证号(如有)、手机号在展示时进行掩码处理。
## 5.2. 密码加密方法
系统不存储明文密码。采用 **BCrypt** 算法对用户密码进行加盐哈希加密存储。验证时使用相同算法比对,确保即使数据库泄露,攻击者也难以破解密码。
## 5.3. 角色与权限
|角色|可以访问的表|操作权限|
|---|---|---|
|系统管理员|所有表|增删改查 (ALL)|
|考生|sys_user (自己的记录)|查询、修改 (Own)|
|考生|base_*, biz_admission_*|查询 (Read Only)|
|考生|biz_volunteer_* (自己的记录)|增删改查 (Own)|
## 6. 性能优化方法
1. 查询优化:避免使用不必要的连接和子查询,选择合适的数据类型和聚合函数,优化查询语句可以提高查询速度
2. 缓存优化:将频繁使用的数据和查询结果缓存起来可以减少对数据库的访问次数,提高性能。
## 7. 数据库管理与维护说明
1. 数据库设计:考虑数据模型、数据结构、数据类型等,以确保数据库的高效性和可靠性。
2. 安装与配置:根据需求选择合适的版本,并进行必要的配置,如内存分配、磁盘空间等。
3. 数据备份与恢复:定期备份数据库可以确保在发生数据丢失或损坏时能够及时恢复数据。
4. 性能调整:对数据库进行性能调整可以提高数据库的响应速度和效率。
5. 安全管理:采取适当的措施确保数据库的安全性,如访问控制、加密等。
6. 更新和维护:及时更新数据库和相关软件,并对数据库进行维护和修复,以确保系统的稳定和可靠性。
---
---
---
---