1. 项目概述:学生成绩管理系统的数据库实践
作为一名计算机专业的学生,数据库课程设计是检验我们学习成果的重要环节。这次我选择开发一个基于MySQL的学生成绩管理系统,通过实践来加深对数据库原理的理解。这个系统需要管理学生信息、教师信息、课程信息以及成绩记录,是一个典型的多表关联数据库应用。
在开始之前,我首先分析了系统需求:需要记录学生的基本信息(学号、姓名、性别、年龄、专业、学分等)、教师信息(工号、姓名、性别、所属院系)、课程信息(课程编号、课程名称、学分)以及学生选课和成绩记录。这些数据之间存在复杂的关联关系,需要通过合理的数据库设计来实现高效管理。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据库逻辑设计
2.1 实体关系(E-R)模型设计
在设计数据库之前,我首先绘制了全局E-R图来理清各个实体之间的关系。系统包含以下主要实体:
- 学生(Student):包含学号(sid)、姓名(sname)、性别(sgender)、年龄(sage)、专业(smajor)和学分(credit_points)等属性
- 教师(Teacher):包含工号(tid)、姓名(tname)、性别(tgender)和所属院系(tdept)等属性
- 课程(Course):包含课程编号(cid)、课程名称(cname)和学分(credit_point)等属性
这些实体之间存在以下关系:
- 学生与课程之间是多对多关系(一个学生可选多门课,一门课可被多个学生选)
- 教师与课程之间也是多对多关系(一个教师可教多门课,一门课可由多个教师教)
- 学生与课程之间有成绩关联
2.2 表结构设计与SQL实现
根据E-R模型,我将系统设计为6张表:
2.2.1 学生表(student)
sql复制CREATE TABLE student (
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(4) NOT NULL,
sgender VARCHAR(2) NOT NULL,
sage INT NOT NULL,
smajor VARCHAR(20) NOT NULL,
credit_points DOUBLE NOT NULL
);
设计考虑:
- 学号(sid)设为主键并自增,确保唯一性
- 姓名(sname)限制为4个字符,适合中文姓名
- 学分(credit_points)使用DOUBLE类型,便于计算
- 所有字段设为NOT NULL,保证数据完整性
2.2.2 教师表(teacher)
sql复制CREATE TABLE teacher(
tid INT PRIMARY KEY AUTO_INCREMENT,
tname VARCHAR(4) NOT NULL,
tgender VARCHAR(4) NOT NULL,
tdept VARCHAR(20) NOT NULL
);
2.2.3 课程表(course)
sql复制CREATE TABLE course(
cid INT PRIMARY KEY AUTO_INCRE
