设计某高校学生选课管理系统
因为期末的时候做数据库综合实验太匆忙,很多地方都是能用就好,做完之后突然想到可以改进的方法,所以现在寒假来重做一下
题目如下:
设计某高校学生选课管理系统
-
实现学生信息、课程学生管理;
-
实现教师及任课信息管理;
-
实现选课登记,要保证学生不能选修重复的课程(实用触发器实现);
-
创建存储过程统计学生指定学期选修课程的总学分数;
-
创建视图查询2006-2007学年,没有被选修的课程;
-
创建存储过程统计各教师任课的学生人数;
-
创建表间关系
前言
这部分说的是我之前的实现,和改进思路,节省时间可跳过。
因为要求对于教师和课程等等的对应关系没有说明,所以可以自由发挥,我能找到 教师和课程之间是一对一关系的 实现,但是因为我想要实现教师课程多对多的数据库,所以就自己发挥了。
当时做实验的时候,对数据的描述如下:
一名学生可以选修多门课程,一门课程可被多个学生选修,每门课程对应一个老师,每门课程有一个成绩,且选修课程名不能重复;一名教师可以任教多门课程,一门课程可由多个老师教授,每个老师所任教的每门课程有一个课程评价;一个老师可教多名学生。
E-R图如下:
用Excel做的表格如下:
这个实现的问题就在于每个学生选的课程,是需要教师号和课程号一起才能共同确定的,这种情况实验要求就会很麻烦(而且E-R图上是三角多对多感觉很难受)改进思路就是将多一个临时班级实体,一个临时班级对应一个教师和一个课程,这样就可以将学生对老师和学生对课程这两个多对多关系化简成临时班级对老师,临时班级对课程这两个一对多的关系。
接下来,正文开始
数据库描述和E-R图
有要求,可转化成如下数据间关系:
一名学生可以选修多门课程,一门课程可被多个学生选修,学生先修课程的实质是选临时班级。每个临时班级对应一门课程和一个老师,每门课程有一个成绩,且选修课程名不能重复;一名教师可以任教多门课程,一门课程可由多个老师教授。
依照此描述,E-R图如下:
这里临时班级多了一个人数的属性主要是为了接下来统计人数方便。
这里可以先按照E-R图在excel上把表建出来,输一些用于插入数据时做参考和验证。
数据库建立
需要建立的东西如下(加粗为主码):
-
实体
学生(学号,姓名,性别,生日,专业)
教师(职工号,姓名,性别)
课程(课程号,课程名,学分,开课学期)
临时班级(班级号,课程号,教师号,人数)
-
关系
选课(学号,班级号,成绩)
-
视图
未选修06-07(班级号,课程名,教师名)
-
Trigger
学生不能选择课程号相同的课程。
-
存储过程
查看指定学期的学生学分
各教师任课的学生人数
下面是实现过程:
-
建立选课模式
CREATE SCHEMA select_courses;
-
建立实体表
-- student table CREATE TABLE students( stu_id INT PRIMARY KEY, name VARCHAR(40), birth_day DATE, sex VARCHAR(1), major VARCHAR(40) ); -- teacher table CREATE TABLE teathers( tea_id INT PRIMARY KEY, name VARCHAR(40), sex VARCHAR(1) ); -- courses table CREATE TABLE courses( course_id INT PRIMARY KEY, course_name VARCHAR(40), credit INT, open_time VARCHAR(20) ); -- temp class table CREATE TABLE classes( class_id INT PRIMARY KEY, course_id INT, tea_id INT, number INT DEFAULT 0, FOREIGN KEY (course_id) REFERENCES courses(course_id) ON DELETE CASCADE, FOREIGN KEY (tea_id) REFERENCES teathers(tea_id) ON DELETE CASCADE );
-
建立多对多关系表
CREATE TABLE select_courses( stu_id INT, class_id INT, grade INT, PRIMARY KEY (stu_id