学生成绩管理系统数据库设计--MySQLSQL Server

article/2025/10/13 16:42:04

MySQL 数据库设计-学生成绩管理系统

  • 设计大纲
  • 友情链接
    • 1、医疗信息管理系统数据库–MySQL
    • 2、邮件管理数据库设计–MySQL
    • 3、点餐系统数据库设计–SQL Server
    • 4、商品管理系统数据库设计–SQL Server
    • 5、SQL Server医疗信息管理系统数据库【英文版-源码】–(Medical Management System Database)
    • 6、SQL Server电影院数据库管理系统【英文版-源码】–(Movie Theatre Management System Database)
  • 1. 项目背景及需求分析
    • 1.1 项目背景
    • 1.2 需求分析
      • 1.2.1 信息需求
      • 1.2.2 功能需求
      • 1.2.3 安全性与完整性要求
  • 2. 概念结构设计
    • 2.1 抽象出系统实体
    • 2.2 全局E-R图
  • 3. 逻辑结构设计
    • 3.1 关系模式
    • 3.2 函数依赖识别
    • 3.3 范式
    • 3.4 表结构
  • 4. 物理设计和实施
    • 4.1 数据库及表创建
      • 4.1.1 创建数据库
      • 4.1.2 创建数据表
    • 4.2 表数据增删改查测试
      • 4.2.1 MySQL基础知识点总结
      • 4.2.2 精选MySQL练习题数据及解析
        • 4.2.2.1. 连接查询 - 4题
        • 4.2.2.2. 子查询、连接查询 - 4题
        • 4.2.2.3. 聚合分组、连接查询 - 8题
        • 4.2.2.4. if 或 case 语句 - 2题
        • 4.2.2.5. 时间函数 - 6题
        • 4.2.2.6.综合应用 - 12题
        • 4.2.2.7 MySQL练习题数据及答案解析
    • 4.3 创建视图
      • 4.3.1 创建一个学生视图,要求显示学生学号、姓名、班级、性别、专业、各科成绩、平均分、总分
    • 4.4 创建函数
      • 4.4.1 创建一个通过学号sid获取学生信息的函数
      • 4.4.2 自定义函数 2:要求函数体中包含其中一种流程控制语句,要求输入学生学号sid、课程编号,显示学生姓名、课程名称、成绩是否及格(即成绩>=60)
    • 4.5 创建存储过程
      • 4.5.1 学生每选修一门课,如果该门课程成绩达到60分及以上,则把该门课程学分加到学生学分里面,输出该学生姓名、学分
    • 4.6 创建触发器
      • 4.6.1 创建一个更新学生学分的触发器,如果该学生分数>=60,则给该学生加上这门课的学分

设计大纲

在这里插入图片描述

友情链接

1、医疗信息管理系统数据库–MySQL

医疗信息管理系统数据库–MySQL

2、邮件管理数据库设计–MySQL

邮件管理数据库设计–MySQL

3、点餐系统数据库设计–SQL Server

点餐系统数据库设计–SQL Server

4、商品管理系统数据库设计–SQL Server

商品管理系统数据库设计–SQL Server

5、SQL Server医疗信息管理系统数据库【英文版-源码】–(Medical Management System Database)

SQL Server医疗信息管理系统数据库【英文版-源码】–(Medical Management System Database)

6、SQL Server电影院数据库管理系统【英文版-源码】–(Movie Theatre Management System Database)

SQL Server电影院数据库管理系统【英文版-源码】–(Movie Theatre Management System Database)

1. 项目背景及需求分析

1.1 项目背景

为了深刻的理解MySQL数据库,以学生成绩信息管理为例,设计一个简单、规范、高效的学生成绩信息管理系统数据库。

1.2 需求分析

1.2.1 信息需求

对学校而言,学生成绩管理是管理工作中重要的一环,但是高校学生的成绩管理工作量大、繁杂,人工处理非常困难。因此,借助于强大计算机的处理能力,能够把人从繁重的成绩管理工作中解脱出来,并且更加准确、安全、清晰的管理环境。

1.2.2 功能需求

能够进行数据库的数据定义、数据操纵、数据控制等处理功能。具体功能应包括:可提供课程安排、课程成绩数据的添加、插入、删除、更新、查询,学生及教职工基本信息查询的功能。

1.2.3 安全性与完整性要求

对于学生成绩管理系统数据库来讲,由于其主要数据是学生成绩,只能由本人以及所教老师及教务处知道,因此做好数据安全性是重中之重。另外,要求所有在校学生的信息都要录入其中,并且要设计好个别情况。

2. 概念结构设计

概念结构设计是整个数据库设计的关键,它通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。
根据学生成绩信息管理数据库设计需求抽象出学生、教师、课程、成绩四个实体,对四个实体做简化处理,默认一门课程仅被一位老师讲授。因简化后关系结构比较简单,故省略了局部E-R图。对4个实体之间的关系进行分析如下:
一位学生会被多位老师教导,一位老师会教导多位学生,所有学生与教师之间是多对多(m:n)的关系;
一位学生可能会选修多门课程,一门课程会被多位学生选修,所以学生与课程之间是多对多(m:n)的关系;
一位学生会有多项成绩(具体指某学生一门课程的分数),一项成绩仅被一位学生拥有,所以学生与成绩是一对多(1:n)的关系;
一位教师会讲授多门课程,一门课程会被一位教师讲授,所以教师与课程的关系是一对多(1:n)的关系;
一门课程拥有多项成绩,一项成绩仅被一门课程拥有,所以课程与成绩的关系是一对多(1:n)的关系;

2.1 抽象出系统实体

学生(学号、姓名、班级、性别、专业、出生日期、学分);
老师(教师编号、姓名、学院);
课程(课程编号、教师编号、课程名称、课程学分);
成绩(学号、课程编号、分数);

2.2 全局E-R图

在这里插入图片描述

3. 逻辑结构设计

3.1 关系模式

E-R图向关系模型转化要解决的问题是如何将实体型和实体间的联系转化为关系模式,如何确定这些关系模式的属性和码。
设计学生成绩管理数据库,包括学生(students)、老师(teachers)、课程(courses)、成绩(scores)四个实体,其关系模式中对每个实体定义属性如下:

students 表:学号(sid)、姓名(sname)、班级(sclass)、性别(sgender)、专业(smajor)、出生日期(sbirthday)、学分(credit_points),此为联系“students表”所对应的关系模式,学号为该关系的候选码,满足第三范式。

teachers表:教师编号(tid)、姓名(tname)、学院(tschool),此为联系“teachers表”所对应的关系模式,教师编号为该关系的候选码,满足第三范式。

courses表:课程编号(cid)、教师编号(tid)、课程名称(cname)、学分(credit_point),此为联系“courses表”所对应的关系模式,课程编号和教师编号为该关系的候选码,满足第三范式。

scores表:学号(sid)、课程编号(cid)、分数(score),此为联系“scores表”所对应的关系模式,学号和课程编号为该关系的候选码,满足第三范式。

3.2 函数依赖识别

后续更新补充

3.3 范式

后续更新补充

3.4 表结构

数据库中包含4个表,即学生(students)、老师(teachers)、课程(courses)、成绩(scores)。

students表的表结构
在这里插入图片描述
teachers表的表结构
在这里插入图片描述
courses表的表结构
在这里插入图片描述
scores表的表结构
在这里插入图片描述

4. 物理设计和实施

4.1 数据库及表创建

4.1.1 创建数据库

-- 如果已有该数据库,则删除
DROP DATABASE IF EXISTS StudentScore;-- 创建数据库
CREATE DATABASE StudentScore CHARSET=UTF8;

4.1.2 创建数据表

-- 使用数据库
USE StudentScore;-- 创建数据表
-- table 1: students
DROP TABLE IF EXISTS students;
CREATE TABLE students(
sid INT(20) UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,
sname VARCHAR(20),
sclass INT(10),
sgender VARCHAR(10),
smajor VARCHAR(20),
sbirthday DATE,
credit_points INT(5) -- 学生已修学分
);-- table 2: teachers
DROP TABLE IF EXISTS teachers;
CREATE TABLE teachers(
tid INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,
tname VARCHAR(20),
tschool VARCHAR(20)
);-- table 3: courses
-- 需要完整代码请添加文章底部微信,付费咨询-- table 4: scores
-- 需要完整代码请添加文章底部微信,付费咨询

4.2 表数据增删改查测试

4.2.1 MySQL基础知识点总结

在这里插入图片描述

4.2.2 精选MySQL练习题数据及解析

点击查看
4.2.2 精选MySQL练习题数据及答案解析

4.2.2.1. 连接查询 - 4题

1.1 查询同时选修了课程 1 和 课程 2 的学生的信息

1.2 查询课程 1 比 课程 2 成绩高的学生的信息及课程分数

1.3 查询课程 1 分数小于 60 的学生信息和课程分数,按分数降序排列

1.4 查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩

4.2.2.2. 子查询、连接查询 - 4题

2.1 查询有成绩的学生信息

2.2 查询学过 孙悟空 老师所授课程的学生信息

2.3 查询至少有一门课与学号为 1 的同学所学相同的学生信息

2.4 查询选修了课程 2 但是没有选修课程 1 的学生信息

4.2.2.3. 聚合分组、连接查询 - 8题

3.1 查询同名学生名单,并统计同名人数

3.2 查询选修了 3 门课程的学生信息

3.3 查询平均成绩大于等于 85 的所有学生的学号、姓名、平均成绩(保留2位小数)

3.4 查询平均成绩大于等于 60 分的学生学号、姓名、平均成绩(保留2位小数)

3.5 查询两门及以上课程分数小于60分的学生学号、姓名及平均成绩(保留2位小数)

3.6 查询姓 赵 的同学的学生信息、总分,若没选课则总分显示为 0

3.7 查询所有同学的学号、姓名、选课总数、总成绩,没选课的学生要求显示选课总数和总成绩为 0

3.8 查询所有学生学号、姓名、选课名称、总成绩,按总成绩降序排序,没选课的学生显示总成绩为 0

4.2.2.4. if 或 case 语句 - 2题

4.1 若学号sid为学生座位编号,现开始对座位号调整,奇数号和偶数号对调,如1和2对调、3和4对调…等, 如果最后一位为奇数,则不调换座位,查询调换后的学生座位号(sid)、姓名,按sid排序

4.2 查询各科成绩最高分、最低分和平均分: 以如下形式显示:课程id、课程名、选修人数、最高分、最低分、平均分、及格率、中等率、优良率、优秀率
及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90
要求查询结果按人数降序排列,若人数相同,按课程号升序排列,平均分、及格率等保留2位小数

4.2.2.5. 时间函数 - 6题

5.1 查询 1990 年出生的学生信息

5.2 查询各学生的年龄,分别按年份和按出生日期来算

5.3 查询本周或下周过生日的学生

5.4 查询本月或下月过生日的学生

5.5 查询学生信息,要求:学号和年龄同时至少比一位学生的学号和年龄大

5.6 查询连续相邻3年出生的学生中,学生性别相同的学生信息

4.2.2.6.综合应用 - 12题

6.1 查询和学号为 1 的同学学习的课程完全相同的其他同学的信息

6.2 查询每科均及格的人的平均成绩:学号、姓名、平均成绩(保留2位小数)

6.3 查询选修 张若尘 老师所授课程的学生中,该门课成绩最高的学生信息及成绩(成绩可能重复)

6.4 查询各科成绩,按各科成绩进行排序,并显示排名 分数重复时保留名次空缺,即名次不连续

6.5 查询各科成绩,按各科成绩进行排序,并显示排名 分数重复时不保留名次空缺,即名次连续

6.6 查询学生 赵雷 的 变形 课程成绩的排名:学生信息,分数,排名 分数重复时不保留名次空缺,即名次连续

6.7 查询课程 时空穿梭 成绩在第2-4名的学生,要求显示字段:学号、姓名、课程名、成绩 分数重复时不保留名次空缺,即名次连续

6.8 查询学生的总成绩,并进行排名,总分重复时不保留名次空缺,即名次连续

6.9 查询学生的总成绩,并进行排名,总分重复时保留名次空缺,及名次不连续 排名名次不连续,不需要去重

6.10 统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[60-0] 分别所占百分比 结果:保留2位小数

6.11 查询各科成绩前三名的记录,按照课程编号和分数排序 分数重复时,重复分数按照一名算,即不保留名次空缺,及名次连续

6.12 查询各科成绩的前两名,列出学生信息、课程名、分数,按照课程名、分数排序 分数重复时,重复分数按照一名算,即不保留名次空缺,及名次连续

4.2.2.7 MySQL练习题数据及答案解析

点击查看
4.2.2 精选36道MySQL练习题数据及答案解析

4.3 创建视图

4.3.1 创建一个学生视图,要求显示学生学号、姓名、班级、性别、专业、各科成绩、平均分、总分

DROP VIEW IF EXISTS v_students_info;CREATE VIEW v_students_info AS
SELECT  stu.sid,stu.sname,stu.sclass,stu.sgender,stu.smajor,-- 需要完整代码请添加文章底部微信,付费咨询ifnull(sum(sc.score), 0) AS "总分"
FROM 	students stu LEFT JOINscores sc ON stu.sid = sc.sid LEFT JOINcourses c ON c.cid = sc.cid
GROUP BY stu.sid;

查看视图:
在这里插入图片描述
在这里插入图片描述

4.4 创建函数

4.4.1 创建一个通过学号sid获取学生信息的函数

DROP FUNCTION IF EXISTS get_student_info_by_sid;DELIMITER //
CREATE DEFINER = CURRENT_USER FUNCTION get_student_info_by_sid(id INT)
RETURNS VARCHAR(300)
DETERMINISTIC
BEGIN
-- 需要完整代码请添加文章底部微信,付费咨询
END//
DELIMITER ;
-- 调用函数
SELECT get_student_info_by_sid(8);

调用函数结果:
在这里插入图片描述
其中DELIMITER 先定义结束符为 // , 然后又将结束符改为mysql默认的分号结束符。

了解delimiter 关键字请点击:
MySQL中 delimiter 关键字详解
如果出现报错1418:

Error Code : 1418 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)

参考下面:
MySQL ERROR 1418 的解决方法

4.4.2 自定义函数 2:要求函数体中包含其中一种流程控制语句,要求输入学生学号sid、课程编号,显示学生姓名、课程名称、成绩是否及格(即成绩>=60)

DROP FUNCTION IF EXISTS get_student_scores_by_id;DELIMITER //
CREATE DEFINER = CURRENT_USER FUNCTION get_student_scores_by_id(sid INT, cid INT)
RETURNS VARCHAR(300)
DETERMINISTIC
BEGIN-- 多个变量要分开声明,否则会报错DECLARE score INT;DECLARE name VARCHAR(20);DECLARE course_name VARCHAR(20);-- 需要完整代码请添加文章底部微信,付费咨询ELSERETURN '找不到该学生、课程或该学生没有选课!';END IF;
END//
DELIMITER ;-- 调用函数
SELECT get_student_scores_by_id(1, 2);

调用函数结果:
在这里插入图片描述

4.5 创建存储过程

4.5.1 学生每选修一门课,如果该门课程成绩达到60分及以上,则把该门课程学分加到学生学分里面,输出该学生姓名、学分

DROP PROCEDURE IF EXISTS add_scores;DELIMITER //
CREATE DEFINER = CURRENT_USER PROCEDURE add_scores(IN stu_id INT, IN co_id INT, IN s_score INT,OUT name VARCHAR(20),OUT s_credit_point INT
)
DETERMINISTIC
BEGIN
-- 多个变量要分开声明,否则会报错
DECLARE points INT;
-- 需要完整代码请添加文章底部微信,付费咨询
COMMIT;
END//
DELIMITER ;-- 测试调用存储过程
SELECT * FROM students WHERE sid > 10;
CALL add_scores(11, 2, 33, @name, @s_credit_point);
SELECT @name, @s_credit_point;
CALL add_scores(12, 2, 88, @name, @s_credit_point);
SELECT @name, @s_credit_point;

调用存储过程结果:
在这里插入图片描述

4.6 创建触发器

4.6.1 创建一个更新学生学分的触发器,如果该学生分数>=60,则给该学生加上这门课的学分

语法
create trigger triggerName
after/before insert/update/delete on 表名 for each row #这句话在mysql是固定的 begin
sql语句;
end;

DROP TRIGGER IF EXISTS update_credit_point;DELIMITER //
CREATE TRIGGER update_credit_point
AFTER INSERT ON scores FOR EACH ROW
BEGIN DECLARE points INT;-- 需要完整代码请添加文章底部微信,付费咨询END IF;
END//
DELIMITER ;-- 测试数据
SELECT * FROM students WHERE sid < 3;
INSERT INTO scores VALUES
(1, 4, 77),
(2, 4, 55);
SELECT * FROM students;

测试结果:
在这里插入图片描述
终于写完啦!


http://chatgpt.dhexx.cn/article/X2bBniqj.shtml

相关文章

数据库设计-网上书店系统

一、需求分析 1.1 用户分析 网上书店系统的使用者主要有三种&#xff1a;普通用户、会员和管理员。 普通用户&#xff1a;浏览图书、查询图书、注册成为会员等&#xff1b; 会员&#xff1a;浏览图书、查询图书、加入购物车、修改购物车、订购图书、生成及查看订单、查看修改…

数据库设计

数据库设计 一.数据库设计概述1.数据库设计的特点2.数据库设计方法3.数据库设计的基本步骤4.数据库设计过程中的各级模式 二.需求分析1.需求分析的任务2.需求分析的方法3.数据字典 三.概念结构设计1.概念模型2.E-R模型3.概念结构设计 一.数据库设计概述 ①数据库设计是指对于一…

机器学习之PCA

一、PCA基本介绍 PCA(Principal Components Analysis)-主成分分析算法 用于数据降维、可视化、去噪非监督学习算法 二、PCA工作原理 目标&#xff1a;每次将空间中多维的样本点映射到一条直线上&#xff08;要保证样本点之间的间距最大&#xff0c;用方差衡量&#xff0c;即保…

PCA9536——填坑

0. 问题 使用PCA9536输出模式控制4个小灯&#xff0c;开始时候按几次就不显示了&#xff0c;以为是接线不稳定原因。 后来一按开机电源就不显示了&#xff0c;以为是其他器件电源不稳定导致。 1. 问题1排除 接线问题&#xff0c;重新接线&#xff0c;重新做端子&#xff0c;…

sklearn PCA

sklearn.decomposition.PCA class sklearn.decomposition.PCA(n_componentsNone, *, copyTrue, whitenFalse, svd_solverauto, tol0.0, iterated_powerauto, random_stateNone)官方&#xff1a;link PCA是特征降维中一种 线性降维 的方法。 与特征选择不同&#xff08;直接筛…

使用PCA对彩色图片降维

PCA对图片降维 1.原图片2.PCA降维思路3.代码4.k5效果图5.结论 1.原图片 2.PCA降维思路 1、小灰灰图片&#xff08;407&#xff0c;367&#xff09;2、求图片407行每行的均值mean&#xff0c;再将407行每行元素各自减去对应行的均值mean&#xff0c;即去中心化。得矩阵X&#xf…

使用PCA拟合平面

PCA原理&使用PCA拟合平面 背景三点确定一平面多点拟合平面基础数学知识PCA基本思想PCA拟合平面计算过程 PCA理解中心化协方差对角化 背景 本文参考以下两篇平面解析的论文。 《Fast Plane Extraction in Organized Point Clouds Using Agglomerative Hierarchical Cluster…

Dynamic inner PCA 和 Dynamic PCA

动态PCA方法的核心思想&#xff1a; 将数据X变成增广矩阵&#xff0c;即&#xff1a; l为潜在变量数&#xff0c;然后对X进行传统的PCA方法进行求解&#xff0c;即是动态PCA的结果。 动态内模PCA与之不同&#xff0c;上述动态PCA的一大缺陷是增加了数据的维度&#xff0c;而动…

python实现PCA

★ PCA个人理解&#xff1a; PCA降维是通过变换坐标系&#xff0c;来尽可能的减少信息损失。 ★ PCA思路&#xff1a; 我们的初始矩阵为X&#xff0c;它是mn维的矩阵&#xff0c;其中&#xff1a;m是该数据集有m条记录&#xff0c;n是每条记录中有n个特征&#xff0c;X的基本格…

PCA降维算法

目录 1.维度1.1数据维度1.2特征维度 2.sklearn中的降维算法2.1PCA与SVD2.2降维的实现2.3重要参数n_components2.3.1最大似然估计自选超参数2.3.2 按信息量占比选超参数 3.PCA中的SVD3.1重要参数svd_solver 与 random_state3.2重要属性components_3.3重要接口inverse_transform …

PCA降维

一、主成分分析 1、动机&#xff1a;多个变量之间往往存在一定的相关性&#xff0c;可以通过线性组合的方式从中提取信息。 2、主成分分析&#xff1a;将原始的n维数据投影到低维空间&#xff0c;并尽可能的保留更多的信息。 ---投影后方差最大 ---最小化重构误差 从而达到…

pca绘图

pca 1 PCAtools 1.1 加载R包 library(PCAtools) library(tidyverse)1.2 加载数据&#xff0c;构建表达矩阵和分组信息&#xff08;以iris为例&#xff09; iris <- as.data.frame(iris) iris <- iris %>% mutate(class str_c("a",1:dim(iris)[1],sep …

PCA算法详解

文章出处&#xff1a;http://blog.csdn.net/zhongkelee/article/details/44064401 一、PCA简介 1. 相关背景 上完陈恩红老师的《机器学习与知识发现》和季海波老师的《矩阵代数》两门课之后&#xff0c;颇有体会。最近在做主成分分析和奇异值分解方面的项目&#xff0c;所以记…

PCA 算法详解

PCA算法步骤&#xff1a; 设有m条n维数据。 1&#xff09;将原始数据按列组成n行m列矩阵X 2&#xff09;将X的每一行&#xff08;代表一个属性字段&#xff09;进行零均值化&#xff0c;即减去这一行的均值 3&#xff09;求出协方差矩阵 4&#xff09;求出协方差矩阵的特征值及…

PCA原理

PCA 各位&#xff0c;久违了&#xff5e; 什么是PCA&#xff1f; 什么是PCA呢&#xff1f;这是一个问题&#xff0c;什么样的问题&#xff1f;简单而又复杂的问题&#xff0c;简单是因为百度一下就会出现一大堆的解释&#xff0c;复杂是因为它里面蕴含的内容还是很多的&…

python实现PCA降维

本文包括两部分&#xff0c;使用python实现PCA代码及使用sklearn库实现PCA降维&#xff0c;不涉及原理。 总的来说&#xff0c;对n维的数据进行PCA降维达到k维就是&#xff1a; 对原始数据减均值进行归一化处理&#xff1b;求协方差矩阵&#xff1b;求协方差矩阵的特征值和对…

PCA算法

主成分分析&#xff08;Principal components analysis&#xff0c;以下简称PCA&#xff09;是最重要的降维方法之一。 参考&#xff1a;http://www.cnblogs.com/pinard/p/6239403.html PCA的思想 PCA顾名思义&#xff0c;就是找出数据里最主要的方面&#xff0c;用数据里最…

PCA

R语言实现PCA 一次来自男神MR.来的作业PCA读取数据PCA主体部分输出PCA的主要结果&#xff0c;列出主成分分析分析结果利用碎石图来展示PCA结果对component进行一些解释 简略分析利用PCA结果来进行一个排序下面进行聚类分析 一次来自男神MR.来的作业 PCA 读取数据 #读取数据&…

主成分分析(PCA)原理详解

转载请声明出处&#xff1a;http://blog.csdn.net/zhongkelee/article/details/44064401 一、PCA简介 1. 相关背景 上完陈恩红老师的《机器学习与知识发现》和季海波老师的《矩阵代数》两门课之后&#xff0c;颇有体会。最近在做主成分分析和奇异值分解方面的项目&#xff0c…

PCA详解

本文目录 一、来源及作用存在问题基本作用 二、 基本原理及求解步骤核心思想如何选择投影方向 三、原理分析最大投影方差最小重构代价 四、SVD与PCA的关系 一、来源及作用 存在问题 在我们训练模型的过程中&#xff0c;有时会出现在训练集上误差较小&#xff0c;但到了测试集误…