数据库教务管理系统综合实验报告.docx

上传人:b****1 文档编号:2086346 上传时间:2023-05-02 格式:DOCX 页数:20 大小:360.49KB
下载 相关 举报
数据库教务管理系统综合实验报告.docx_第1页
第1页 / 共20页
数据库教务管理系统综合实验报告.docx_第2页
第2页 / 共20页
数据库教务管理系统综合实验报告.docx_第3页
第3页 / 共20页
数据库教务管理系统综合实验报告.docx_第4页
第4页 / 共20页
数据库教务管理系统综合实验报告.docx_第5页
第5页 / 共20页
数据库教务管理系统综合实验报告.docx_第6页
第6页 / 共20页
数据库教务管理系统综合实验报告.docx_第7页
第7页 / 共20页
数据库教务管理系统综合实验报告.docx_第8页
第8页 / 共20页
数据库教务管理系统综合实验报告.docx_第9页
第9页 / 共20页
数据库教务管理系统综合实验报告.docx_第10页
第10页 / 共20页
数据库教务管理系统综合实验报告.docx_第11页
第11页 / 共20页
数据库教务管理系统综合实验报告.docx_第12页
第12页 / 共20页
数据库教务管理系统综合实验报告.docx_第13页
第13页 / 共20页
数据库教务管理系统综合实验报告.docx_第14页
第14页 / 共20页
数据库教务管理系统综合实验报告.docx_第15页
第15页 / 共20页
数据库教务管理系统综合实验报告.docx_第16页
第16页 / 共20页
数据库教务管理系统综合实验报告.docx_第17页
第17页 / 共20页
数据库教务管理系统综合实验报告.docx_第18页
第18页 / 共20页
数据库教务管理系统综合实验报告.docx_第19页
第19页 / 共20页
数据库教务管理系统综合实验报告.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据库教务管理系统综合实验报告.docx

《数据库教务管理系统综合实验报告.docx》由会员分享,可在线阅读,更多相关《数据库教务管理系统综合实验报告.docx(20页珍藏版)》请在冰点文库上搜索。

数据库教务管理系统综合实验报告.docx

数据库教务管理系统综合实验报告

华北科技学院计算机系综合性实验

实验报告

 

课程名称《数据库原理及应用教程》

实验学期2011至2012学年第2学期

学生所在系部计算机学院

年级专业班级

学生姓名学号

任课教师郭红

实验成绩

 

计算机系制

《数据库原理及应用教程》课程综合性实验报告

开课实验室:

软件开发实验室

(一)2012年6月6日

实验题目

《教务成绩管理系统》数据库设计

一、实验目的

利用一种DBMS作为设计平台,理解并应用课程中关于数据库设计的相关理论,能按照数据库设计步骤完成完整的数据库设计,包括需求分析、概念设计、逻辑设计、物理设计和实施。

同时能够正确应用各个阶段的典型工具进行表示。

二、设备与环境

(1)硬件设备:

PC机一台

(2)软件环境:

安装Windows操作系统,安装数据库管理系统SQLServer2008等。

三、实验内容

1.需求分析

首先,通过调查,教务成绩管理系统中主要有四类用户,即学生用户,老师用户,教务管理员和系统管理员。

对应这些用户,其处理要求的主要的功能就是进行一系列的查询和各类数据的管理及维护。

其具体的处理要求如下:

1)系统管理:

实现系统管理人员对系统的管理,包括添加删除用户,更改密码,数据备份,数据还原,注销功能。

2)教务管理:

实现教务管理人员对系统的管理,包括课程安排,成绩审核,学生成绩管理功能。

3)基本信息:

实现显示学生和老师以及课程、班级、系别的基本信息。

4)查询:

包括实现学生查询,老师查询。

学生查询包括自己的基本信息,自己所修的课程,成绩,老师查询包括查询自己的信息和自己的所授的课程。

5)教师对成绩的写入以及自己信息的查询与维护。

其次,该教务管理系统中,结合以上用户种类以及其具体的处理功能要求,教务成绩管理系统要具备以下信息要求:

教务管理系统涉及的实体有:

●教师——教师号、姓名、性别、年龄、职称、系号;

●学生——学号、姓名、性别、年龄、系号;

●授课关系——教师号、课程号;选课关系——学号、课程号、成绩;

●系——系号、系名、电话;

●课程——课程号、课程名、学分。

其中,这些实体之间的联系如下:

●一个系有若干名学生和老师,但一名学生或一名老师只能属于一个系。

●一名教师可以教多门课,一门课可以有几位老师讲授,但不同老师讲的同一门课其课程号是不同的,即对于授课教师或课程来说,课程号是唯一的。

●一名同学可以选多门课,一门课可被若干同学选中。

●本单位学生、教师可能有重名,所以教师号、学号才是唯一的。

另外,对于教务成绩管理系统需求分析的安全性及完整性要求,首先,安全性方面,系统应对不同用户设置不同的权限,例如,学生用户不能更改自己的成绩信息,从而保障数据库数据的安全。

其次,完整性方面,要求各种信息记录的完整性,关键信息记录内容不能为空;各种数据间相互的联系的正确性;相同的数据在不同记录中的一致性等。

2.概念结构设计

在概念结构设计中,我采用自底向上设计概念结构的方法。

即第一步抽象数据并设计局部视图,第二步是集成局部视图,得到全局的概念结构。

该教务管理系统中的局部概念模型(E-R图)如下:

(1)、一个系内的关系模式图:

(2)、选课关系与授课关系模式图:

该教务管理系统中的全局概念模型为:

3.逻辑结构设计

(1)关系模式的设计与优化

E-R图向关系模型的转换:

a.“教师”实体对应的关系模式:

教师(教师号,姓名,性别,年龄,职称)

代码表示为:

Teacher(Tno.Tname.Tsex.Tage.Prof)

其中,教师号为其主码,又因为教师与系别之间是n:

1的工作关系,经过与系别关系模式的合并后,系别号Dno成为教师关系模式的外码,存在的关系依赖为Tno→(Tname,Tsex,Tage,Prof,Dno),不存在对候选码的部分依赖与传递依赖,所以满足BCNF。

b.“学生”实体对应的关系模式:

学生(学号,姓名,性别,年龄)

代码表示:

Student(Sno,Sname,Ssex,Sage)

其中,学号为其候选码,又因为学生与班级之间是n:

1的属于关系,存在的关系依赖为Sno→(Sname,Ssex.Sage,Dno),不存在对候选码的传递依赖,所以满足BCNF.

c.系(系代号,系名,系办公室电话)

代码表示:

Sdept(Dno,Dname,Dphone)

系代号为候选码,存在的函数依赖为Dno→(Dname,Dphone),且不存在部分依赖与传递依赖,所以满足BCNF。

d.“选修”联系对应的关系模式:

选课(学号,课程号,成绩)

代码表示:

SC(Sno,Cno,Grade.)

此为m:

n联系“选修”所对应的关系模式。

Sno和Cno均为外码。

存在的函数依赖为完全函数依赖(Sno,Cno)→grade,且不存在部分依赖与传递依赖,所以满足BCNF。

e.“课程”实体对应的关系模式:

课程(课程号,课名,学时)代码表示:

Course(Cno,Cname,Credit)

f.“授课”联系对应的关系模式:

授课(课程号,教师号)代码表示:

TC(Tno,Cno.)

此为m:

n联系“授课”所对应的关系模式。

Tno和Cno均为外码。

(2)设计合适的视图

在将E-R图向关系模型转换后,还应根据局部应用的需求,对不同级别的用户定义不同的视图,这样不仅可以在视图中重新定义某些属性名,使用户使用更方便,而且还可以通过视图保证系统的安全性。

在本次的教务成绩管理系统数据库中,我针对使用该数据库最频繁的学生和教师用户建立了相关视图,其中包括对系别、教师、课程的分配视图;对学生学号、成绩、等相关信息的查询,教师基信息的查询两个视图,这样,对这些经常使用的查询,用户就可以通过视图来查询,大大简化了用户的使用。

创建的三个视图的截图如下:

教师基信息与学生成绩查询视图:

4.物理设计

该数据库中每一个关系模式的主码分别为系统自动设置的索引,如学生关系模式中的学号,教师关系模式中的教师号,系别中的系号等,同时,通过对实际操作的思考,为了查询某系的老师的方便,我们还需要在Teacher表中建立一个“系号”Dno的索引;又因为查询操作很多都通过学生姓名查找的,所以还需要在Student表姓名列sname上建立一个索引等,这样大大简化查询操作。

5.数据库的实现

(1)创建库、表

在该教务成绩管理系统中包括了学生表、教师表、选课表、系别表、授课表、课程表六个表。

在此,我以学生表为例进行说明表的创建。

一个完整的表必须包括对实体完整性、参照完整性、用户定义完整性的三种完整性的定义。

在学生表中,首先考虑表的实体完整性要求,在该学生表中学号被设为主码,用PRIMARYKEY定义,且该表含有多个属性,所以学号就是表级约束条件,从而完成了学生表的实体完整性的定义。

其次,对于学生表的参照完整性,系号(Dno)是该学生表的外码,同时它还是班级系别Sdept表的主码,所以对其用FOREINGKEY短语进行定义,并用REFERENCES短语指明该外码是参照那些表的主码,从而完成对表的参照完整性的定义。

最后,是表的用户定义完整性,在该学生表中,结合实际情况我们不难想到应该定义一个姓名Sname为非空的约束条件和性别Ssex只能为“男”或“女”二者选其一的约束条件,其中姓名的非空用NOTNULL定义即可,而性别用CHECK语句定义即可。

创建学生表的代码为:

CREATETABLEstudent

(SnoCHAR(10)PRIMARYKEY,

SnameCHAR(20)NOTNULL,

SsexCHAR

(2)CHECK(SsexIN('男','女')),

SageSMALLINT,

DnoCHAR(10),

FOREIGNKEY(Dno)REFERENCESSdept(Dno)

);

创建的学生表截图如下:

(2)创建用户

该教务管理系统的主要用户有学生用户,老师用户,教务管理员和系统管理员等四种,所以需要创建这四种类型的用户,并授予其相应的权限。

对于学生用户就只能授予其查询学生基本信息student表的权限,老师相关信息视图V-teacher表的权限,查询学生成绩视图V_student表的权限,以及查询教师授课TC表的权限;

教师则具有查询学生基本信息Student表的权限,查询教师授课TC表的权限,还具有修改自己基本信息teacher表的权限,还有登记插入学生成绩信息即修改SC表的权限;

教务管理员具有修改本系一切相关信息的权力,包括查询、删除、增添、修改,而系统管理员具有创建各种表、视图、触发器及存储过程并对各个用户进行相应授权的权力。

下面是建立学生(u1)、教师(u2)、教务处(u3)的用户(登陆名)截图:

(3)使用触发器、存储过程等相关技术。

在教务成绩管理数据库中,鉴于存在教师的退休及学生退学或毕业的情况,所以必然会有删除这些信息的操作,为了方便起见,所以有必要设计一个“删除教师信息”触发器以及“删除学生信息”触发器。

同时教务成绩管理系统的数据库必然涉及到学生选课退课的问题,所以还需要设计一个关于选课退课系统的“选课”触发器与“删除选课”触发器。

“删除教师信息”与“删除学生信息”触发器的过程大致相同,就“删除教师信息”触发器来说,当删除教师时如果该教师在TC表中有其授课信息,则当删除该教师后必会引起TC表不可用,所以创建的该触发器当所要删除的教师号存在于TC表里时,系统就应该给出“TC表里有该教师的课程,请先删除TC表里的记录!

”的提示信息;就“删除学生信息”触发器来说,如果该学生退学时在选课表里仍有其选课记录,则当删除该学生信息后,在SC表里的相关选课记录必然成为无效,所以在此设置了一个判断即将退学的学生是否能删除的触发器,当退学学生在SC表里有该学生的记录时应该给出“SC表里有该学生的选课课程,请先删除SC表里的记录!

”的信息提示。

“删除教师信息”触发器操作演示如下所示:

“选课”与“删除选课”触发器的过程大致相同,就“选课”触发器来说当所选课程的课程号存在于课程表里时,系统就会将该条的选课记录添加到SC表中,并给出“选课成功”的信息提示,同样删除选课与此类似,当要删除的选课的课程号存在于SC表时,系统就会将该条的选课记录从SC表中删除,并给出“删除选课成功”的信息提示。

演示执行“选课”触发器的操作结果截图如下:

--选课触发器

createtrigger选课

onSC

forinsert

as

ifexists(selectCnofromcoursewhere

cno=(selectcnofrominserted))

begin

print'选课成功'

end

这样在进行这些相关数据的处理时就可以通过触发器来控制,如果触发动作体执行失败,激活触发器的事件就会终止执行,触发器的目标表或触发器可能影响的其他对象不发生变化。

除了创建相应触发器外,教务成绩管理系统中还用到了数据库的存储过程,在本数据库中我建立了关于指定某个学号的“学生成绩查询”的存储过程,这样学生只需要输入自己的学号就可以查询出自己所选的科目以及其相应的成绩,存储过程的编译及其实现过程如下截图所示:

其实,触发器就是一种特殊的存储过程,这样创建完成这些常用功能的存储过程后它们被编译后就能保存在数据库中,它们就像函数一样可以被反复调用,提高运行速度。

四、实验结果及分析

这次实验报告我选择的是设计“教务成绩管理系统”的数据库。

通过本次自己独立的设计一个数据库,我更清楚了设计数据库的方法和步骤。

通过一步步的分析、实施、操作,我将理论联系于实际,并把课本上所学的和老师所讲的知识综合的运用起来,这样不仅使我加深了对SQL语句的理解,而且提高了对所学知识的熟练运用程度。

在实验过程中,我了解到创建表时也需要注意一些我们常常容易忽略的问题。

例如:

建表中的元组顺序问题,还有一些表格中的属性列的完整性要求是在另一些表的属性列的基础上创建的,所以,这就存在创建表是的一些的顺序问题,如果不按照这个顺序建表,则建表必然会失败。

另外,在创建表的同时还得注意每个属性的数据类型,这个细节问题也是我们常常忽略的问题,对每个属性列都要根据实际情况确定相应的数据类型,并定义一定的长度大小,以提高空间利用率。

我在本次作业中的另一收获是明确了触发器中rollback语句的正确用法,当触发器所设定的操作能正确执行时就不需要添加rollback语句,而当触发器所设定的操作不能完成时需要用rollback语句回滚,并给出相应的提示信息。

这次大作业中,我也看出了我还存在的许多问题,在一些步骤中思考的不够缜密,对某些方面也有些疏漏之处。

所以,这就要求我们查询更多的信息,理论充分联系实际,多多参与在实际数据库的创建中去,在实践中积累经验,不断学习,才能提高自己在数据库方面的能力。

教师评价

评定项目

A

B

C

D

评定项目

A

B

C

D

需求分析清楚

安全性设计

概念结构符合需求

游标或存储过程的使用

逻辑结构设计

操作熟练

索引设计

文字流畅

完整性设计

报告规范

其他:

 

评价教师签名:

年月日

 

--一、创建表

--建立系别表

CREATETABLEsdept

(DnoCHAR(10)PRIMARYKEY,

DnameCHAR(20)UNIQUE,

DphoneCHAR(20),

);

--建立教师表

createtableteacher

(TnoCHAR(10)PRIMARYKEY,

TnameCHAR(20)notnull,

TsexCHAR

(2)CHECK(TsexIN('男','女')),

ProfCHAR(4),

TageSMALLINT,

DnoCHAR(10),

FOREIGNKEY(Dno)REFERENCESSdept(Dno)

);

--建立学生表

CREATETABLEstudent

(SnoCHAR(10)PRIMARYKEY,

SnameCHAR(20)NOTNULL,

SsexCHAR

(2)CHECK(SsexIN('男','女')),

SageSMALLINT,

DnoCHAR(10),

FOREIGNKEY(Dno)REFERENCESSdept(Dno)

);

--建立课程表

CREATETABLEcourse

(CnoCHAR(10)PRIMARYKEY,

CnameCHAR(20)UNIQUE,

CreditSMALLINT,

);

--建立授课表

CREATETABLETC

(CnoCHAR(10),

TnoCHAR(10),

);

--建立选课表

CREATETABLESC

(SnoCHAR(10),

CnoCHAR(10),

GradeSMALLINTCHECK(Grade>=0ANDGrade<=100),

PRIMARYKEY(Sno,Cno),

);

----------------------------------------------------------

--学生的学号、成绩等信息查询的视图

createviewV_student

as

selectstudent.Sno,Sname,cname,Credit,grade

fromstudent,SC,course

wherestudent.Sno=SC.Snoand

course.Cno=SC.Cno

--教师基本信息查询的视图

createviewV_teacher

as

selectTname,Prof,Dname

fromteacher,sdept

whereteacher.Dno=sdept.Dno

----------------------------------------------

--在教师表中系代号列上建立索引

createuniqueindexteadno

onteacher(Tno,Dno);

--在学生表姓名列上建立索引

createuniqueindexstusname

onstudent(Sno,sname);

-----------------------------------------------

--创建学生用户

createloginu1

withpassword='111'

useGRADE

createuser学生

forloginu1

--对学生用户进行授权

grantselect

onstudent

to学生

grantselect

onV_student

to学生

grantselect

onSC

to学生

grantselect

onTC

to学生

grantselect

onV_teacher

to学生

--创建教师用户

createloginu2

withpassword='111'

useGRADE

createuser教师

forloginu2

--对教师用户进行授权

grantselect

onstudent

to教师

grantselect

onTC

to教师

grantselect,update

onteacher

to教师

grantselect,insert,update(grade)

onSC

to教师

--创建教务管理员用户

createloginu3

withpassword='111'

useGRADE

createuser教务处

forloginu3

--对教务管理员用户进行授权

grantselect,update,insert,delete

onteacher

to教务处

grantselect,update,insert,delete

onstudent

to教务处

grantselect,update,insert,delete

onsdept

to教务处

grantselect,update,insert,delete

oncourse

to教务处

grantselect,update,insert,delete

onsdept

to教务处

grantselect,update,insert,delete

oncourse

to教务处

grantselect,update,insert,delete

onTC

to教务处

grantselect,update,insert,delete

onSC

to教务处

------------------------------------------

--删除教师信息触发器

createtrigger删除教师信息

onteacher

fordelete

as

ifexists(select*fromtcwheretno=(selecttnofromdeleted))

begin

print'course表里有该教师的课程,请先删除course表里的记录!

'

rollback

end

--演示删除教师信息触发器的操作

delete

fromteacher

wheretno='t1'

 

--删除学生信息触发器

createtrigger删除学生信息

onstudent

fordelete

as

ifexists(select*fromscwheresno=(selectsnofromdeleted))

begin

print'SC表里有该学生的选课课程,请先删除SC表里的记录!

'

rollback

end

--演示删除学生信息触发器的操作

delete

fromstudent

wheresno='s1'

 

--选课触发器

createtrigger选课

onSC

forinsert

as

ifexists(selectCnofromcoursewherecno=(selectcnofrominserted))

begin

print'选课成功'

end

--演示执行“选课”触发器

insert

intoSC(sno,cno)

values('s1','c3')

--查询选课结果

select*

fromSC

--删除选课触发器

createtrigger删除选课

onSC

forDELETE

AS

ifexists(selectCnofromscwherecno=(selectcnofromdeleted))

begin

print'删除选课成功'

end

--演示执行“删除选课”触发器

delete

fromsc

wheresno='s1'andcno='c3'

---------------------------------------------------

--查询成绩的存储过程

CREATEPROCEDURE查询成绩@snchar(10)

as

selectstudent.sno,sname,cname,Credit,grade

fromstudent,course,SC

wherestudent.sno=sc.snoand

o=oand

student.sno=@sn

--查询学号为“s1”的学生成绩

exec查询成绩's1'

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2