Files
xlh/未完成/文档内容/数据库设计报告_Markdown生成版.md

5.7 KiB
Raw Blame History

数据库设计报告

项目名称基于SpringBoot框架的高考志愿辅助填报系统设计与实现
学生姓名:向黎华
学号229970427
学院/班级:软件学院 / 22软工8班
指导教师:彭娟


1. 引言

1.1 编写目的

本文档详细描述了高考志愿辅助填报系统的数据库设计,包括概念结构设计、逻辑结构设计以及物理结构设计,旨在为系统开发提供底层数据支撑。

1.2 数据库环境

  • 数据库管理系统MySQL 8.0+
  • 字符集utf8mb4 (部分历史表为 utf8mb3)
  • 存储引擎InnoDB (为主), MyISAM (部分用于只读查询优化)

2. 概念模型与E-R图

本系统的核心实体及其关系描述如下:

erDiagram
    Member ||--o| Order : places
    Member {
        int id
        string mobile
        int fraction "高考分"
        int ranking "位次"
    }
    
    School ||--|{ School_Major : offers
    School {
        int id
        string title
        tinyint f985
        tinyint f211
    }
    
    Major ||--|{ School_Major : defines
    
    School_Major ||--|{ School_Major_Score : history_data
    School_Major_Score {
        float lowest_score
        int lowest_order
        int year
        int province_id
    }
    
    Plan ||--|{ Plan_Step : contains
    Plan_Step }|--|| School_Major : references
    
    Planner ||--o| Member : guides

实体关系说明

  1. 用户 (Member/Planner)
    • 分为普通用户(学生/家长)、规划师、商户。
    • 一个用户可以关联一个商户(归属关系)。
  2. 学校 (School)
    • 拥有多个属性(名称、所在地、层次)。
    • 包含多个专业 (School_Major)。
    • 每个专业在不同年份、不同省份有不同的录取分数 (Fractional/Score)。
  3. 专业 (Major)
    • 标准专业库,包含专业类、门类信息。
  4. 订单 (Order)
    • 用户购买规划师服务或商户服务产生订单。
    • 关联用户、规划师、支付状态。
  5. 志愿方案 (Plan/Step)
    • 规划师为学生制定的志愿方案,包含选定的学校和专业。

3. 逻辑结构设计 (数据字典)

3.1 核心业务表

1. 规划师表 (zr_planner)

存储规划师的基本信息、认证状态和账户余额。

字段名 类型 描述 备注
id int 主键 自增
username varchar(64) 账户名
wx_id varchar(255) 微信OpenID 用于微信授权
type int 教师类型 1.普通教师 2.志愿规划师 3.专家咨询师
status int 认证状态 0.未认证 1.认证中 2.已认证 3.拒绝
balance int 余额 单位:分
merchant char(8) 商户号 关联商户

2. 商户表 (zr_planner_merchant)

存储合作机构/商户的信息。

字段名 类型 描述 备注
id int 主键
username varchar(30) 用户名
merchant char(8) 商户号 唯一标识
balance int 余额 单位:分
company varchar(255) 公司名称

3. 商户学员表 (zr_planner_merchant_member)

商户名下的学生信息。

字段名 类型 描述 备注
id int 主键
merchant_number char(8) 商户号 外键
mobile char(11) 手机号
fraction int 高考分数
ranking int 高考位次
select_subject varchar(255) 选科

3.2 基础数据表

1. 学校表 (zr_school)

全国高校基础信息。

字段名 类型 描述 备注
id int 主键
title varchar(100) 学校名称
f985 tinyint 是否985 1是
f211 tinyint 是否211 1是
province_name varchar(100) 前在省份

2. 学校专业分数线 (zr_school_major_score)

核心数据表,记录各校各专业历年在各省的录取数据。

字段名 类型 描述 备注
id int 主键
school_id int 学校ID 外键
title char(255) 专业名称
lowest_score float 最低分
lowest_order int 最低位次 核心参考数据
batch char(32) 批次 本科批/专科批等
year int 年份
province_id int 省份ID

3. 一分一段表 (zr_one_minute)

用于位次换算。

字段名 类型 描述 备注
score int 分数
num int 同分人数
cum_num int 累计人数 即位次
year int 年份
province_id int 省份ID

3.4 物理设计与数据量估算

根据历年高考数据规模,本系统核心表数据量估算如下:

表名 描述 预估数据量 (3年) 存储策略
zr_school_major_score 录取分数线 ~1500万行 分库分表 (按省份/年份),只读优化
zr_one_minute 一分一段表 ~300万行 Redis 缓存热点数据
zr_member 注册用户 ~50万 常规 InnoDB 存储
zr_school 院校库 ~3000行 全量缓存

针对海量录取数据,建议采用 MySQL 的分区表特性,按 year 进行范围分区,以提高查询效率。

4. 其它重要表

  • zr_major: 标准专业库
  • zr_planner_order: 佣金与提现订单
  • zr_planner_merchant_service_order: 服务购买订单
  • zr_planner_cert: 规划师资质认证详情

5. 索引设计

为了优化查询性能,针对高频查询字段建立索引:

  • zr_school_major_score: 组合索引 (school_id, province_id, year, batch)(lowest_score, province_id, ...)
  • zr_school: title 索引用于搜索
  • zr_planner: wx_id 索引用于微信登录