迷你教务系统:数据库课程设计


欢迎在我的 GitHub 查看更多项目与代码实现。

一、写在前面的话

这个迷你教务管理系统其实是数据库的课程实验,我花了一周时间(每天大概 1~2 小时)手搓了一个。

这个项目很简单,主要目的是为了熟悉 SQL 语句的编写以及掌握数据库工具的使用。不过反正看着还过得去,就也放在专栏里。

Dashboard 概览

图 1:系统首页的数据可视化仪表盘


二、从建表开始:SQL 基础实践

教务系统是数据库课程中最经典的案例,业务逻辑大家都很熟悉:学生选课、老师打分、统计学分等。我一共设计了 11 张表,覆盖了核心的实体关系。

1. 数据定义语言

  • 主键(PK):保证记录唯一(如 Sno)。
  • 外键(FK):保证引用关系正确(如 SC.Cno 必须存在于 Course 表)。
  • Check 约束:限制数据范围(如 Credit > 0)。
  • Enum 枚举:规范字段取值(如 Gender 只能是 ‘M’ 或 ‘F’)。

数据库 Schema

图 2:数据库关系模式设计图

2. 触发器

为了防止非法数据的录入,我尝试写了几个复杂的触发器。比如:

  • 防止环形依赖:在设置先修课程时,不能让 A 的先修是 B,B 的先修又是 A。
  • 选课校验:学生在选课(Insert SC)前,触发器会自动检查该学生是否修完了这门课的所有先修课程。

完整性违约提示

图 3:触发完整性约束时的前端报错拦截


三、后端开发:Flask + SQLAlchemy

为了快速验证功能,我选择了轻量级的 Flask 框架。

这里我用了 RESTful API 的设计风格:

  • GET /api/v1/students:获取所有学生列表。
  • POST /api/v1/students:新增一个学生。
  • PUT /api/v1/students/<id>:修改学生信息。
  • DELETE /api/v1/students/<id>:删除学生。

后端逻辑非常简单直观,基本就是接收前端 JSON -> 拼接 SQL/ORM 查询 -> 返回数据。

Dashboard 细节

图 4:后端 API 驱动的前端数据展示


四、前端交互与可视化

虽然是练手项目,但我还是给它配了一个基于原生 JS + Webpack 的单页应用(SPA)前端。

我引入了 ECharts 图表库:

  • 热力图:统计每天的操作活跃度。
  • 柱状图:分析各院系的课程数量、教师职称分布。
  • 饼图:展示选课状态(在读 vs 已修)。

这些可视化图表的数据源,本质上都是后端写好的 GROUP BY 聚合查询语句。

授课安排模块

图 5:复杂的授课安排管理界面

学生管理模块

图 6:学生管理与性别/院系分布统计

Author: linda1729
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source linda1729 !
评论
  TOC