数据库大作业
- 格式:doc
- 大小:187.50 KB
- 文档页数:14
大连理工大学数据库大作业学生成绩管理系统学院(系):专业:学生姓名:学号:指导教师:评阅教师:完成日期:1. 数据库设计 1.1系统名称学生成绩管理系统 1.2 背景介绍1.2.1概述学生成绩管理系统是学校教学管理系统的一个功能模块,可以快速方便的对学生成绩进行管理,如学生成绩录入、学生成绩查询、学生成绩修改等。
从功能描述的内容上看,本系统主要需要实现以下功能:1.2.2信息需求分析(1)院系信息录入、修改、查询:(系号,系名,电话)提供给管理人员,实现院系信息的录入、修改、查询。
提供给院系管理人员进行查询。
(2)班级信息录入、修改、查询:(班级号,人数,班长学号)提供给管理人实现班级信息的录入、修改、查询。
提供给本班级班长进行查询。
(3)学生信息录入、修改、查询:(学号,姓名,性别,地址,系号,班级号)提供给管理人员,实现学生信息的录入、修改、查询。
提供给学生个人进行查询。
(4)课程信息录入、修改、查询:(课程号,课程名,学时,学分)提供给管理人员,实现课程信息的录入、修改、查询。
提供给授课教师进行查询。
(5)学生成绩查询:提供给学生个人,能够查询本人的各项成绩,但是不能录入和修改。
(6)课程成绩查询:提供给教授本门课程的老师,能够查询、修改、删除成绩,能够对数据进行分析,例如求得平均分、优秀率、不及格人数等。
1.2数据库的概念模型设计一个学生属于一个院系,一个院系包含多个学生;一个学生属于一个班级,一个班级包含多个学生;一个学生可以选多门课程,一个课程可以包含多个学生。
1.2.1实体与属性分析1.2.2E-R图关系模型:学生(学号,姓名,性别,地址,系号,班级号)候选码:学号主码:学号外码:系号,班级号课程(课程号,课程名,学时,学分)候选码:课程号主码:课程号外码:无院系(系号,系名,电话)候选码:系号主码:系号外码:无班级(班级号,人数,班长学号)候选码:班级号主码:班级号外码:无学习(学号,课程号,分数)候选码:(学号,课程号)主码:(学号,课程号)外码:学号,课程号1.3逻辑模型设计学生信息表结构(student)课程信息表结构(course)院系信息情况表结构(dept)班级信息情况表结构(class)以五个上表没有非主属性对码的部分函数依赖,没有非主属性对码的传递函数依赖,满足3NF的要求,不会存在数据冗余、插入异常、删除异常、修改异常的问题。
2.数据库上机2.1初始建立2.1.1建立表create table student(sno char(9) primary key,name char (8) not null ,gender char (2) check(gender IN ('男','女')),age char(4),birth datetime,address varchar(20))create table course(cno char(3),subject char(16) not null,time smallint check( time>0 ),credit smallint check( credit>0 ),primary key (cno))create table dept(dno char(2) not null primary key ,dname varchar(20) not null ,tele char(10))create table class(classno char(5),num int,monitor char(9),primary key (classno),foreign key (monitor) references student(sno)) create table study(sno char(9) not null,cno char(3) not null ,score int,primary key (sno,cno),foreign key (sno) references student(sno),foreign key (cno) references course(cno))alter table studentadd classno char(5)foreign key references class(classno)alter table studentadd dno char(2)foreign key references dept(dno)2.1.2建立索引create unique index sindexon student(sno)create unique index cindexon course(cno)create unique index dindexon dept(dno)create unique index lindexon class(classno)2.1.3建立视图建立由学号、姓名、课程号、课程名、成绩构成的学生成绩视图 stuscore1create view stuscore1(sno,name,cno,subject,score)asselect student.sno, student .name,o, student .subject,scorefrom student , course,studywhere student.sno=study.sno and o= o建立由学号、姓名、系名称、课程号、课程名、成绩构成的学生成绩视图stuscore2 create view stuscore2(sno,name,dname,cno,subject,score)asselect student.sno, ,dname,cno,subject,scorefrom stuscore1, dept dept, studentwhere stuscore1.sno = student.sno and student.dno = dept.dno 2.2查询操作2.2.1单表查询查询年龄在20-21岁之间的学生的学号、姓名、年龄、地址select sno,name,age,addressfrom studentwhere age between 20 and 21查询一班班长的学号select monitorfrom classwhere classno=012.2.2多表查询查询学生的学号,姓名,年龄,性别,所在专业select sno,name,age,gender,dnamefrom student,deptwhere dept.dno=student.dno查询成绩大于80的学生的学号,姓名,课程号,课程名,分数select student.sno,name,o,subject,scorefrom student, course, studywhere student.sno = study.sno and o = o and score >= 802.2.3嵌套查询查询二班班长的学号,姓名,年龄,性别select sno,name,age,genderfrom studentwhere sno=(select monitorfrom classwhere classno=02)查询其他班中比01班某一学生年龄小的学生的学号、姓名、年龄select sno,name,agefrom studentwhere dno <> '01' and age < any(select agefrom studentwhere dno = '01')2.2.4 聚合查询查询每个学生的平均成绩并按学生学号升序分别输出select sno, avg(score)from studygroup by snoorder by sno asc查询每个学生的学号,姓名,性别,年龄并按年龄升序输出Select sno,name,gender,ageFrom studentGroup by ageOrder by age asc2.3数据更新2.3.1增加在成绩表中一个记录,其中学号为11,课程号为02,成绩为92 insert into studyvalues('11', '02', 92)新建平均成绩表(AvgGrade)中含有学号、平均成绩数据项,计算平均成绩将结果存入平均成绩表中create table avgscore(sno char(9),avgscore int)insert into avgscore (sno, avgscore)(select sno, avg(score)from studygroup by sno)2.3.2删除将学分小于等于3的课程从课程表中删除delete from course where credit <= 3将院系信息表清空delete from dept2.3.3修改将课程表中02课程的学时改为32,学分改为2update courseset time = 32, credit = 2where cno = '02'将学号为06的学生的地址改为安徽update studentset address= '安徽'where sno = '06'2.4触发器create trigger trgDeleteClass on classfor deleteasdelete studentfrom class join studenton student.classno= class. classnoreturn3个人体会与总结曾想拥有一份自己的信息系统,自己去做管理员,来管理自己的生活,管理自己的人际关系等,但一直苦于不知道如何来创建数据库,也不知道怎么进行修改输出等,自己可以将一份系统的用户界面制作出来,但是对于后台的数据库创建与管理却没有什么思路。
自从学习了数据库之后,却让我在这方面看到了光明,让我喜欢上了这个学科。
在学习过程中,无形之中却对数据库的理解过于笼统,一直不知道在实际应用中该如何运用,在这次大作业的完成过程中,让我看到认识到一些基础的内容还是很容易实现的,在最初的时候运用软件进行操作还不够熟练,并且自己写的命令也有不正确的地方,通过向同学学习,让我知道了正确的命令,并在实际操作的过程中,一条条命令的实现,让我也有了一些信心与成就感。
同时也让我感受到SQL在使劲生活中的应用与重要性。