数据库课程设计论文-竞赛管理系统(代码+数据字典+流程图).docx

上传人:韩长文 文档编号:3934395 上传时间:2019-10-10 格式:DOCX 页数:75 大小:6.73MB
返回 下载 相关 举报
数据库课程设计论文-竞赛管理系统(代码+数据字典+流程图).docx_第1页
第1页 / 共75页
数据库课程设计论文-竞赛管理系统(代码+数据字典+流程图).docx_第2页
第2页 / 共75页
数据库课程设计论文-竞赛管理系统(代码+数据字典+流程图).docx_第3页
第3页 / 共75页
数据库课程设计论文-竞赛管理系统(代码+数据字典+流程图).docx_第4页
第4页 / 共75页
数据库课程设计论文-竞赛管理系统(代码+数据字典+流程图).docx_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《数据库课程设计论文-竞赛管理系统(代码+数据字典+流程图).docx》由会员分享,可在线阅读,更多相关《数据库课程设计论文-竞赛管理系统(代码+数据字典+流程图).docx(75页珍藏版)》请在三一文库上搜索。

1、信息工程学院数据库课程设计论文题 目:学科竞赛数据库设计学号:专业班级:姓名:指导老师:完成日期:72学科竞赛管理系统数据库设计摘 要: 学科竞赛是每个学校有的一项活动,他可以提高学生学习的积极性,培养学生对学科的兴趣,丰富学生的课余生活,让学生在课下可以学到知识,交到朋友。但学科竞赛的管理十分繁琐,流程复杂,工作量大。因此老师和教务处都迫切需要一个能方便管理竞赛的系统。该系统面向学生,老师,教务处,学院领导四种用户,涉及申请比赛,查询比赛,总结比赛,报名参赛,查询成绩等多方面功能。这次设计包括需求分析,概念结构设计,物理结构设计,数据库实施四个方面。关键字:数据库;学科竞赛管理;SQL Se

2、rver目录1需求分析1业务流程图:2数据流程图:32数据库结构设计72.1 概念设计82.1.1 分E-R图建立82.1.2 全局/整体E-R图82.2 逻辑设计92.2.1 建立关系模式102.2.2 关系模式规范化处理112.2.3 用户子模式建立122.2.4 关系模式逻辑结构定义143数据库物理设计154数据库实施与测试164.1 SQL Server 2008数据库实施与测试164.1.1 数据库及数据库对象建立164.1.2 数据入库164.1.3 数据库测试174.2 Oracle数据库实施与测试414.2.1 数据库及数据库对象建立414.2.2 数据入库414.2.3 数据

3、库测试415总结526附录52附录152数据字典:52附录256附录359附录46413级软件工程专业3班数据库应用系统课程设计课程论文1需求分析需求分析是每个应用程序设计前必须的也是最重要的步骤,如果需求分析没做好,后期的工作可能算白费了。因为软件的设计就是为了服务用户,如果对用户的需求分析错误,那么最终设计的软件就不是用户所需要的。所以需求分析在软件开发周期中占有比较的的比重。并且贯穿软件开发始终。不能为了减少开发时间而缩短需求分析的时间。需求分析需要全面考虑用户的每个需求,有些用户没提到的需求也要从其他需求中提去出来。需求分析力求准确、完整、清晰、具体。为了更好的分析需求,需要设计很多图

4、和表。包括业务流程图、数据流程图。需要设计数据字典,包括数据项、数据结构、数据流、数据逻辑、数据存储。概述:学科竞赛信息管理系统旨在搭建一个信息平台,方便各类用户处理学科竞赛方面的事务,如方便用户浏览信息,简化管理中的各种操作,提高相关人员工作的效率。其服务的对象有四个,分别为学生,教师,教务处管理员,学院管理员。学生主要的业务有报名参赛,老师可以申报比赛,提交比赛总结,教务处和学院负责审核比赛和添加比赛,并且负责各项赛事的统计和分析工作。所有用户都可以对赛事进行查询。首先从业务的角度来描述其功能。业务主要分为两个部分:报名管理和过程管理,过程管理分为竞赛项目管理,竞赛统计管理,竞赛项目查询三

5、部分。报名管理:系统根据竞赛的报名信息推荐给相关学生。学生如果选择报名,不用填写信息,系统会将其个人信息直接存储在报名表中,待教师和学院进行审核,审核的结果会在开赛前几天公布。竞赛项目管理:教师填写竞赛申请表和报名信息,系统先交个学院审核,通过了再交给教务处审核。通知老师最终的审核结果。如果都审核通过了,教务处发布到系统中。如果审核不通过,教务处可以让老师修改项目预算,修改时间或地点后再次申请,或者直接放弃该项赛事。竞赛统计管理:学院赛事统计,可以查看某一年份各学院申报竞赛的数量和经费,也可以分析各个学院在某个比赛的表现,查询某个学生在校所获奖项等。这些都可以作为报表导出。竞赛赛事查询:各用户

6、可以根据不同的需求进行竞赛项目的查询操作,查看竞赛的报名情况,成绩等信息。图 1-1系统功能结构图简化功能结构如下业务流程图:图1-2添加比赛业务图1-3学生报名参赛业务数据流程图:图 1-4顶层数据流程图图 1-5第一层数据流程图1图1-6第一层数据流程图2图1-7第一层数据流程图3图1-8第二层数据流程图1图1-9第二层数据流程图2图1-10第二层数据流程图3根据数据流程图可以建立数据字典,分别有数据项,数据结构,数据流,数据逻辑和数据存储。见附录1.2数据库结构设计主要包括概念设计和逻辑设计两个部分。2.1 概念设计/*阐述概念设计目标、任务和方法,重点介绍概念设计的内容。*/概念模型是

7、现实世界到机器世界的一个中间层次。概念结构设计时整个数据库设计的关键,它通过对用户需求进行综合、归纳与抽象,形成一个独立于具体数据库管理系统的概念模型。 数据库系统概论(王珊,萨师煊第五版)概念设计就是将需求分析得到的用户需求抽象为信息结构(即概念模型)。概念设计是在需求分析的基础上进行设计的,是把需求分析的成果转化为简单、清晰、易于理解的概念模型。概念模型中最主要的就是ER图。2.1.1 分E-R图建立阐述分E-R图建立的思想(以中层数据为切入点,按照分层次/分模块思想),用E-R模式描述。E-R图的建立以比赛为切入点。分为教师申请比赛,学院或教务处添加或总结比赛。学院或教务处审核比赛,学生

8、报名参赛。教师总结比赛等模块2.1.2 全局/整体E-R图整体E-R图整体E-R把各个E-R图按逻辑组合起来。来粗略的描述整个系统要完成的功能。E-R图如下:图 2- 1全局E-R图2.2 逻辑设计逻辑结构设计的任务就是把概念结构设计阶段设计的基本E-R图转换为与选用数据库管理系统产品所支持的数据模型相符合的逻辑结构。2.2.1 建立关系模式E-R图向关系模型的转换要解决的问题是,如何将实体型和实体间的联系转换为关系模式,如何确定这些关系模式的属性和码。对于不同的实体间的联系有不同的转换方式。1. 一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。如果转换为一个独

9、立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码。如果与某一端实体对应的关系模式合并,则需要再该关系模式的属性中加入另一个关系模式的码和联系本身的属性。2. 一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。3. 一个m:n联系转换为一个关系模式,与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,个实体的码组成关系的码或关系码的一部分。4. 三个或三个以上实体间的一个多元联系可以转

10、换为一个关系模式。与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性,个各实体组成关系的码或关系码的一部分。5. 具有相同码的关系模式可以合并。根据上面的转换原则得到的关系模式如下:学生信息(学号,姓名,性别,生日,电话,邮箱,专业,所在班级,年级,系统登录密码, 学号-姓名, 学号-性别, 学号-电话,学号-邮箱,学号-所在班级, 学号-年级, 学号-专业,学号-系统登录密码);教师信息(工号,姓名,性别,生日,电话,邮箱,所在学院,登录密码,职务, 备注,工号-姓名, 工号-性别,工号-生日,工号-电话, 工号-邮箱, 工号-所在学院, 工号-登录密码, 工号-职务);学院信

11、息(学院名, 负责人工号, 学院名-负责人工号);/教务处当做学院处理。专业信息(专业名称,所在学院, 专业名称-所在学院);赛事信息(赛事编号,赛事名称,赛事信息,比赛时间,赛事级别,主办方,负责人工号,报名开始时间,报名结束时间,赛事举办地点,赛事预算,赛事申请信息,赛事总结,赛事审核信息,赛事编号-赛事名称, 赛事编号-比赛时间,赛事编号-赛事级别,赛事编号-主办方,赛事编号-负责人工号,赛事编号-报名开始时间,赛事编号-报名结束时间,赛事编号-赛事举办地点,赛事编号-赛事申请信息,赛事编号-赛事总结,赛事编号赛事审核信息);竞赛报名信息及结果(赛事编号, 报名学生学号,指导老师, 报名

12、学生成绩,报名学生排名,报名学生备注,赛事编号+报名学生学号-报名学生学号,赛事编号+报名学生学号-指导老师,赛事编号+报名学生学号-报名学生成绩,赛事编号+报名学生学号-报名学生排名,赛事编号+报名学生学号-报名学生备注) 主码:赛事编号+报名学生学号;通知信息(通知编号,通知时间,通知发起者,通知内容, 通知编号-通知时间, 通知编号-通知发起者,通知编号-通知内容);学生通知(通知编号,通知对象学号);教师通知(通知编号,通知对象工号);2.2.2 关系模式规范化处理1. 对于学生信息关系模式, 姓名,性别,专业,生日,邮箱,手机号,年级,密码, 这些属性都是独立的不相互关联的,所以不存

13、在依赖关系,那么处理学号与其他非主属性的函数依赖外,就不存在其他函数依赖,也就不存在传递依赖了,所以满足三范式。2. 对于教师关系模式,与学生信息关系模式相同,所以也满足三范式。3. 对于竞赛信息关系,其中的非主属性互不相关,所以不存在传递关系。4. 对于竞赛成绩信息,他是由竞赛与学生的关系转换而来,非主属性互不依赖,所以也满足三范式。5. 对于通知信息,其中的非主属性互不相关,所以不存在传递依赖,所以满足三范式。6. 学生通知和教师通知是由实体联系转换而得到的关系,其特点类似于竞赛成绩所以也满足三范式。7. 学院和专业关系都只有两个属性,所以不可能存在传递依赖,所以满足三范式。2.2.3 用

14、户子模式建立用户子模式的设计是根据不同用户或局部应用的需求,结合具体关系数据库来生成多个视图。视图并不是真正存在的表,而是由基本表导出的表,是一个虚表。视图的建立对数据库来说意义重大。视图有以下几个方面的优势:1. 视图能够简化用户的操作。直接在视图上操作,比在表上操作更方便,因为直接在表上操作,可能需要用到,连接、嵌套查询等操作,如果直接在视图上操作,可能不需要这些操作。2. 视图使用户以多种角度看待同一数据。视图的建立没有想基本表那样多的约束,它可以根据用户的实际需求来建立表。比如说成绩信息,在基本表中应该是学号、比赛编号和成绩,但老师希望看到的是学生姓名和比赛成绩。这个就可以构成一个视图

15、。3. 视图对重构数据库提够了一定程度的逻辑独立性。意思是说如果数据库要重构,基本表的结构改变了,但由于视图的存在,如果之前有的操作是在视图上的,那么这些操作相关的代码就不用修改了。4. 视图能够对机密数据提供安全保护。针对不同用户建立不同的视图,使得不同用户只能看到数据表中的部分数据,可以有效防止数据泄露,数据被恶意修改。5. 适当利用视图可以更清晰地表达查询。如果之前建立好了视图,那么在查询的时候直接对视图进行查询语句会更加简单易懂。针对该数据库,可建立如下视图:1. 对于学生信息,学生,教师能看到学生信息表和教师信息表中除了密码以外的全部信息。所以针对学生信息表和教师信息表,建立一个包含

16、除了密码以外的所有信息的视图。为了方便了解信息,在视图中把学生表中的生日替换为年龄,然后加上学生学院信息。2. 对于赛事信息,除了竞赛申请者、学院负责人,其他人不能看到赛事信息表中的赛事预算,赛事总结,赛事审核信息。所以把赛事信息表中已经审核通过的比赛除了这些属性外,再建立一个视图,方便学生查看和报名比赛。3. 为了方便学生和教师查看成绩,应该建立含有学生具体信息的成绩视图。4. 为了方便学生查看和报名即将举行的比赛,应对已经审核通过的比赛建立视图。5. 为了方便学院和教务处审核比赛,应对待审核的比赛建立视图。具体视图信息如下:1.学生信息视图(学号,姓名,性别,年龄,电话,邮箱,专业,所在学

17、院,年级);2.教师信息视图(工号,姓名,性别,年龄,电话,邮箱,所在学院);3.已审核赛事信息视图(赛事编号,赛事名称,赛事信息,比赛时间,赛事级别,主办方,负责人工号,报名开始时间,报名结束时间,赛事举办地点);4.学生成绩视图(学生姓名,专业,年级,学院,比赛名称,指导老师,比赛成绩,比赛排名,备注);5.待审核赛事信息视图(赛事编号,赛事名称,赛事信息,比赛时间,赛事级别,主办方,负责人工号,报名开始时间,报名结束时间,赛事举办地点,赛事预算,赛事申请信息,赛事总结,赛事审核信息)6.已审核赛事视图(赛事编号,赛事名称,赛事信息,比赛时间,赛事级别,主办方,负责人工号,报名开始时间,报

18、名结束时间,赛事举办地点,赛事预算,赛事申请信息,赛事总结,赛事审核信息)图2-2 全部视图2.2.4 关系模式逻辑结构定义关系模式总共有九个,一下为其汇总表。表2-2 医院门诊管理系统关系模式汇总表关系模式名称含义备注studentInfor学生详细信息附录2 附表1teacherInfor教师详细信息附录2 附表2departInfor学院信息附录2 附表3contestInfor赛事详细信息附录2 附表4notice通知相关内容附录2 附表5stunotice学生通知记录附录2 附表6teanotice教师通知记录附录2 附表7conResult竞赛成绩信息附录1 附表8majInfor

19、专业学院关系附录1附表93 数据库物理设计数据库的物理设计时为逻辑数据模型选取一个合适的物理结构(包括存储结构和存取方法)从而最大限度地提高数据库的效率。数据库的物理设计通常分为两步:(1) 确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构(2) 对物理结构进行评价,评价的重点是时间和空间效率。由于在建立主键的时候,数据库自动将其当做聚簇索引,而一张表只能建立一个聚簇索引,所以这里主要考虑非聚簇索引的设计。虽然索引会明显提高数据查询的效率,但索引的加入也会带来弊端。(1) 索引的建立会增加数据库的磁盘占用空间。索引并不像视图那样是虚的,它是实际存在的一种表,索引任何索引都会占据一定

20、的空间。(2) 索引的建立会影响insert, delete, update等语句的功能。因为执行这些语句的同时,索引也要做相应的调整和更新。就该数据库而言,学生信息是该系统的基础,大多数业务都围绕着某个学院的学生进行的,如通知某个学院的学生参加比赛,查询某个学院的学生信息,所以学生表表会经常涉及到关于某个学院的查询和连接操作。并且学生信息表在建立后就很少插入,更新和删除,根据上面的讨论,可以对学生信息表中的专业名称建立非聚簇索引。另外竞赛信息也是该系统的基础,在学生查看所在学院竞赛,教务处统计某个学院竞赛经费和举办情况这些业务中会经常涉及到ORDER BY、GROUP BY、 UNION、

21、DISTINCT操作,所以对竞赛信息表中的学院名称也建立非聚簇索引。再者,竞赛成绩信息是该系统的中心,无论是学生,老师,学院,还是教务处,都会涉及到查询某个竞赛成绩的操作,而且每个竞赛都会有排名,这涉及到ORDER BY 操作,查询某个竞赛某个学院的比赛情况,这涉及到GROUP BY操作。并且一但竞赛成绩被录入,就不会对该成绩信息进行更新、插入和删除操作。所以,对竞赛成绩中的竞赛编号建立非聚簇索引。图2-3 全部索引4数据库实施与测试4.1 SQL Server 2008数据库实施与测试4.1.1 数据库及数据库对象建立按照逻辑设计的成果,由于存在外键约束,所以对建表的顺序有约束。根据各个约束

22、条件。分别建立学院信息表,专业信息表,教师信息表,学生信息表,赛事信息表,通知信息表,学生通知表,教师通知表,赛事成绩表。DDL语句见附录3。4.1.2 数据入库选择一些学院和专业录入到数据库,然后随机录入教师和学生信息。然后根据,在录入过程中根据外键约束做相应调整。4.1.3 数据库测试下面主要对建立的存储过程和触发器测试。/*教师申请比赛的存储过程*/createprocedure tea_apply_contestconName varchar(30),conInfor text, conLevel varchar(20),conHost varchar(20),conTeaId var

23、char(10),conBudget smallint,conApply textasinsertinto conInfor(conName,conInfor,conLevel,conHost,conTeaId,conBudget,conApply,conVerify)values(conName,conInfor, conLevel,conHost,conTeaId,conBudget,conApply,未审核)go测试代码exec tea_apply_contestJava知识大赛,数据库设计的比赛,面向全院,院级,信息工程学院,2000000003,3000,申请说明书go测试结果:图4

24、-1图4-2/*学院或教务处添加比赛的过程*/createprocedure add_contestconName varchar(30),conInfor text, conLevel varchar(20),conHost varchar(20),conTeaId varchar(10),conBudget smallint,conApply textasinsertinto conInfor(conName,conInfor,conLevel,conHost,conTeaId,conBudget,conApply,conVerify)values(conName,conInfor, co

25、nLevel,conHost,conTeaId,conBudget,conApply,审核通过)goexec add_contestC+语言知识大赛,关于C语言知识设计的比赛,面向全院,院级,信息工程学院,2000000001,3000,申请说明书go测试结果:图4-3/*显示待审核比赛存储过程*/createprocedure show_unverifyasselectteaInfor.teaName,conInfor.conName,conInfor.conInfor,conInfor.conLevel,conInfor.conHost,conInfor.conTeaId,conInfor

26、.conBudget,conInfor.conApplyfromconInfor,teaInforwhere conVerify =未审核and teaInfor.teaID = conInfor.conTeaIdgoexec show_unverifygo图4-4/*审核比赛过程*/createprocedure verify_contestconID int,verifyInfor varchar(10)asupdate conInforset conInfor.conVerify = verifyInforwhere conInfor.conID = conIDgoexec verify

27、_contest2,审核未通过goexec verify_contest3,审核通过go图4-5/*设置报名和比赛信息的过程*/createprocedure set_reg_inforconID int,conTime datetime,regBegin datetime,regEnd datetime,conAddress varchar(50)asupdate conInfor setconInfor.conTime = conTime,conInfor.regBegin = regBegin,conInfor.regEnd = regEnd,conInfor.conAddress =

28、conAddresswhereconInfor.conID = conIDand conInfor.conVerify =审核通过goexec set_reg_infor8,2015/6/24 12:00,2015/6/23 20:00,2015/6/24 10:00,信息工程学院m2go测试结果图4-6/*测试ident_current()函数,该函数返回刚插入后数据项的主键*/insertinto notice(noticeTime,noticeHostID,noticeInfo)values(2015/6/24 00:05,2000000001,测试5)selectident_curre

29、nt(notice)go/*赛事负责人通知学生参加某个比赛*/dropprocedure con_noticegocreateprocedure con_noticeconID int,noticeTime datetime,noticeHostID varchar(10),stuGrade char(4),name varchar(20)asbeginif(select conInfor.conVerifyfrom conInforwhere conInfor.conID = conID)=审核通过begindeclareconName varchar(30),conLevel varcha

30、r(20),noticeID intselect conName =(select conNamefrom conInforwhere conID = conID)select conLevel =(select conLevelfrom conInforwhere conID = conID)insertinto notice(noticeTime,noticeHostID,noticeInfo)values(noticeTime,noticeHostID,conName +马上就要开始了,希望你踊跃报名参加!)select noticeID =(selectident_current(no

31、tice)declare stuID char(10)if conLevel =校级begindeclare uni_cursor cursorforselect stuID from stuInforwhere stuGrade = stuGradeopen uni_cursorfetchnextfrom uni_cursorinto stuIDwhile(FETCH_STATUS=0)begininsertinto stuNotice(stuNotID,stuNotTo)values(noticeID,stuID)fetchnextfrom uni_cursorinto stuIDendc

32、lose uni_cursordeallocate uni_cursorendif conLevel =院级begindeclare dep_cursor cursorforselect stuID fromstuInfor,majInforwherestuGrade = stuGradeand stuInfor.stuMajor = majInfor.majNameand majInfor.depName = nameopen dep_cursorfetchnextfrom dep_cursorinto stuIDwhile(FETCH_STATUS=0)begininsertinto st

33、uNotice(stuNotID,stuNotTo)values(noticeID,stuID)fetchnextfrom dep_cursorinto stuIDendclose dep_cursordeallocate dep_cursorendif conLevel =专业级begindeclare maj_cursor cursorforselect stuID from stuInforwherestuGrade = stuGradeand stuMajor = nameopen maj_cursorfetchnextfrom maj_cursorinto stuIDwhile(FE

34、TCH_STATUS=0)begininsertinto stuNotice(stuNotID,stuNotTo)values(noticeID,stuID)fetchnextfrom maj_cursorinto stuIDendclose maj_cursordeallocate maj_cursorendendelsereturnendgoexec con_notice1,2015/6/23 23:00,2000000001,2013,信息工程学院goexec con_notice3,2015/6/23 22:00,2000000001,2013,信息工程学院go图4-7图4-8/*查看

35、各学院申请比赛经费情况*/createprocedure show_dep_contestasselectconHost,sum(conBudget) totalBudgetfrom conInforgroupbyconHost,conVerifyhaving conVerify =审核通过goexec verify_contest4,审核通过goexec show_dep_contestgo图4-9dropprocedure reg_contestgo/*报名参赛过程*/createprocedure reg_contestconID int,stuID char(10),Guide var

36、char(30)asinsertinto conResult(conID,conStuID,conStuGuiName)values(conID,stuID,Guide)goexec reg_contest2,2013013112,刘全中go图4-10图4-11dropproc set_scorego/*录入成绩过程*/createprocedure set_scoreconID int,stuID char(10),result realasupdate conResultset conStuScore = resultwhereconID = conIDand conStuID = stu

37、IDgoexec set_score2,2013013112,59.9go/*成绩排名过程*/dropproc con_rankgocreateprocedure con_rankconID intasbegindeclaren int,preRank int,score real,preScore realselectn = 1,preRank = 1,preScore = 0declare rank_cursor cursorforselect conStuScorefrom conResultwhere conID = conIDorderby conStuScore descopen

38、rank_cursorfetchnextfrom rank_cursor into scorewhile(FETCH_STATUS= 0)beginif(score = preScore)beginupdate conResultset conStuRank = preRankwherecurrentof rank_cursor endelsebeginupdate conResultset conStuRank = nwherecurrentof rank_cursorselect preRank = n endselectpreScore = score,n = n + 1 fetchne

39、xtfrom rank_cursor into scoreendclose rank_cursordeallocate rank_cursorselect*from conResultwhere conID = conIDorderby conStuScore descendgoexec con_rank3go图4-12droptrigger verify_noticegocreatetrigger verify_noticeon conInforafterupdateasifupdate(conVerify)begindeclarenewVerify varchar(10),noticeTo varchar(10),conName varchar(30)selectnewVerify = conVerify,noticeTo = conTeaID,conName = conNamefrom insertedinsertinto notice(noticeTime,noticeHostID,noticeInfo)values(dateadd(minute, 5,getdate(),0000000000,系统提示:您申请的+ conName +审核情况已被修改为: + newVerify )

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1