数据库 教务管理系统 综合实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华北科技学院计算机系综合性实验
实验报告
课程名称《数据库系统A》
实验学期2011 至2012 学年第 2 学期学生所在系部计算机学院
年级2010 专业班级网络B101班
学生姓名学号
任课教师
实验成绩
计算机系制
《数据库系统A》课程综合性实验报告
学生成绩查询视图:
教师基本信息查询视图:
另外,在创建表的同时还要注意有时需要创建两个表之间的级联,例如,此教务管理系统中SC表是参照学生表的学号和课程表的课号建立的,所以应该在SC表中建立其与Student表与Course表的级联;课程表又是参照教师表中的教师工作证号建立的,所以应该建立一个course表与教师teacher表的级联;班级表也是参照教师表中的教师工作证号建立的,所以也应该建立一个class表与教师teacher表的级联,这样当参照表发生改变时能同时在目标表中也发生相应改变,保证数据库中数据的正确有效性。
(2)创建用户
该教务管理系统的主要用户有学生用户,老师用户,教务管理员和系统管理员等四种,所以需要创建这四种类型的用户,并授予其相应的权限。
对于学生用户就只能授予其查询学生基本信息student表的权限,老师相关信息视图V-teacher表的权限,查询学生成绩视图V_student表的权限,以及查询教师授课分配图DTC 表的权限;
教师则具有查询学生基本信息Student表的权限,查询教师授课的视图DTC表的权限,还具有修改自己基本信息teacher表的权限,还有登记插入学生成绩信息即修改SC表的权限;
教务管理员具有修改本系一切相关信息的权力,包括查询、删除、增添、修改,而系统管理员具有创建各种表、视图、触发器及存储过程并对各个用户进行相应授权的权力。
(3)使用触发器、存储过程等相关技术。
在教务管理数据库中,鉴于存在教师的退休及学生退学或毕业的情况,所以必然会有删除这些信息的操作,为了方便起见,所以有必要设计一个“删除教师信息”触发器以及“删除学生信息”触发器。同时教务管理系统的数据库必然涉及到学生选课退课的问题,所以还需要设计一个关于选课退课系统的“选课”触发器与“删除选课”触发器。
“删除教师信息”与“删除学生信息”触发器的过程大致相同,就“删除教师信息”触发器来说,当删除教师时如果该教师在course表中有其授课信息,则当删除该教师后必会引起course表不可用,所以创建的该触发器当所要删除的教师号存在于course表里时,系统就应该给出“course表里有该教师的课程,请先删除course表里的记录!”的提示信息;就“删除学生信息”触发器来说,如果该学生退学时在选课表里仍有其选课记录,则当删除该学生信息后,在SC表里的相关选课记录必然成为无效,所以在此设置了一个判断即将退学的学生是否能删除的触发器,当退学学生在SC表里有该学生的记录时应该给出“SC表里有该学生的选课课程,请先删除SC表里的记录!”的信息提示。
“删除教师信息”触发器操作演示如下所示:
“选课”与“删除选课”触发器的过程大致相同,就“选课”触发器来说当所选课程的课程号存在于课程表里时,系统就会将该条的选课记录添加到SC表中,并给出“选课成功”的信息提示,同样删除选课与此类似,当要删除的选课的课程号存在于SC表时,系统就会将该条的选课记录从SC表中删除,并给出“删除选课成功”的信息提示。
演示执行“选课”触发器的操作结果截图如下:
这样在进行这些相关数据的处理时就可以通过触发器来控制,如果触发动作体执行失败,激活触发器的事件就会终止执行,触发器的目标表或触发器可能影响的其他对象不发生变化。
除了创建相应触发器外,教务管理系统中还用到了数据库的存储过程,在本数据库中我建立了关于指定某个学号的“学生成绩查询”的存储过程,这样学生只需要输入自己的学号就可以查询出自己所选的科目以及其相应的成绩,存储过程的编译及其实现过程如下截图所示:
其实,触发器就是一种特殊的存储过程,这样创建完成这些常用功能的存储过程后它们被编译后就能保存在数据库中,它们就像函数一样可以被反复调用,提高运行速度。
四、实验结果及分析
这次课程设计我选择的是设计“教务管理系统”的数据库,通过本次自己独立的设计一个数据库,使我更清楚了设计数据库的步骤,通过一步步的分析、操作、实施,理论联系实际,把课堂上所学的知识综合的运用起来,不仅加深了对SQL语句的理解,而且提高了对所学知识的熟练运用程度。
在实验过程中,我了解到创建表时也需要注意一些我们常常容易忽略的问题,例如建表的顺序问题,因为一些表格中的属性列的完整性要求是在另一些表的属性列的基础上创建的,所以,这就确定了创建表的一定的顺序问题,如果不按照这个顺序建表,则建表必然失败。
另外,在创建表的同时还得注意每个属性的数据类型,这个细节问题也是我们常常忽略的问题,对每个属性列都要根据实际情况确定相应的数据类型,并定义一定的长度大小,以提高空间利用率。
我在本次作业中的另一收获是明确了触发器中rollback语句的正确用法,当触发器所设定的操作能正确执行时就不需要添加rollback语句,而当触发器所设定的操作不能完成时需要用rollback语句回滚,并给出相应的提示信息。
最后,在本次作业中,我更正了以前对触发器及存储过程的认识误区,以前错误的认为触发
相关代码如下:
-- 一、创建表
-- 建立系别表
CREATE TABLE sdept
(Dno CHAR(10) PRIMARY KEY,
Dname CHAR(20) UNIQUE,
Dphone CHAR(20),
);
-- 建立教师表
create table teacher
(Tno CHAR(10) PRIMARY KEY,
Tname CHAR(20) not null,
Salary char(10),
Tel CHAR(20),
Email char(20),
Dno CHAR(10) UNIQUE,
FOREIGN KEY (Dno) REFERENCES Sdept(Dno) );
-- 建立班级表
CREATE TABLE class
(Class CHAR(10) PRIMARY KEY,
Ccredit BIGINT,
Tno CHAR(10),
Dno CHAR(10),
FOREIGN KEY (Tno) REFERENCES Teacher(Tno) ON UPDATE CASCADE,
FOREIGN KEY (Dno) REFERENCES Sdept(Dno)