数据库系统原理
课程设计报告
设计题目 实验报告管理系统数据库设计
专业班级 信管1402班
学 号 311409030202
姓 名 杜 新 新
成 绩
评 语:
二零一六年十二月
1 系统开发概述................................................................................................................ 1
1.1 系统开发背景..................................................................................................... 1
1.2 系统功能需求分析.............................................................................................. 1
1.3 系统性能需求分析.............................................................................................. 2
1.4 系统数据流程分析.............................................................................................. 2
2 数据库概念结构设计..................................................................................................... 3
2.1识别实体及效应的属性........................................................................................ 3
2.2确定实体之间的联系............................................................................................ 4
2.3局部E-R图........................................................................................................... 4
2.4综合成全局E-R图................................................................................................. 6
3 数据库逻辑结构设计..................................................................................................... 7
3.1实体与实体属性的转换......................................................................................... 7
3.2实体间联系的转换................................................................................................ 7
3.2.1 一对一联系的转换..................................................................................... 7
3.2.2 一对多联系的转换..................................................................................... 8
3.2.3 多对多联系的转换..................................................................................... 8
3.3关系分范式分析................................................................................................... 9
4 数据库物理结构设计..................................................................................................... 9
4.1 SQLServer数据库及数据表的创建.......................................................................... 9
4.1.1 数据库创建................................................................................................ 9
4.1.2 数据表的创建.......................................................................................... 10
4.2数据完整性设计.................................................................................................. 13
4.2.1 主键约束的创建....................................................................................... 13
4.2.2 DEFAULT约束的创建.................................................................................. 14
4.2.3外键约束的创建........................................................................................ 16
4.2.4 UNIQUE约束的创建.................................................................................. 17
4.2.5 CHECK约束的创建.................................................................................... 18
4.3 索引的创建........................................................................................................ 19
4.4 视图的创建........................................................................................................ 21
5 数据库的操作.............................................................................................................. 23
5.1数据操纵............................................................................................................ 23
5.1.1表结构的修改........................................................................................... 23
5.1.2 数据插入................................................................................................. 24
5.1.3数据更新.................................................................................................. 25
5.1.4数据删除.................................................................................................. 26
5.2 数据查询........................................................................................................... 27
5.2.1 单表查询................................................................................................. 27
5.2.2多表查询.................................................................................................. 29
5.3 存储过程的创建................................................................................................. 31
5.4 触发器的创建.................................................................................................... 34
6 总结............................................................................................................................ 36
参考文献........................................................................................................................ 37
随着计算机技术的发展和互联网技术的广泛应用,教育信息化成为21世纪教育改革和发展的主旋律之一。[2]实践教学环节中一个重要组成部分是实验教学,实验报告的有效管理是能够顺利开展实验教学的保证。在信息化高速发展的今天,传统的实验报告管理形式已经跟不上新型教学模式的发展,在深入分析传统纸质实验报告诸多弊端的基础上,提出并开发了基于高校现有的信息化条件开发实验报告管理系统的解决方案,从而方便了管理,提高了工作效率。
在该系统中,不同角色的用户拥有不同的权限。总体可以分为两大类用户,一类为学生用户,实验前可以查看实验指导书、实验完成后可以下载实验报告并进行相应的填写,完成后即可提交供老师批阅;一类为教师用户,在上课前需要上传实验指导书和实验报告表,在学生做完实验之后,教师需要根据实验报告提交情况核对缺勤情况以及缺勤人员名单,在课下教师还能够通过学生提交的实验报告来了解学生实验情况,并完成实验报告的批阅。系统的功能结构图如图1-1所示:
图1-1功能结构图
为了保证系统能够长期、安全、稳定、可靠的运行,实验报告管理系统应该满足以下性能需求:
⑴统的安全性:
①系统应设置访问用户的标识以鉴别是否是合法的用户,并要求合法用户设置其密码,保证用户身份不被盗用;
②系统应对不同的数据设置不同的访问级别,限制访问用户可以查询和处理数据;
③系统应对不同用户设置不同的权限,区分不同的用户,如区分普通用户(学生),管理员(教师)。
⑵系统的完整性:
①各种信息记录的完整性,信息记录不能为空;
②各种数据间相互作用的联系的正确性;
③相同的数据在不同记录中的一致性[3];
⑶系统的可操作性:
本网站可以在火狐、IE、360等浏览器上进行访问,不用安装任何软件,只需要一个浏览器即可进行使用,有很好的中文界面,操作简便。
学生用户登录网站后,可以填写相应的注册信息,提交后系统会将该用户信息插入到学生信息表。教师用户登录网站后,可先填写注册信息,提交后将信息插入教师信息表,教师在实验课前,可以登录该系统来创建实验项目并上传实验指导书和实验报告表。在实验课期间,选修该门课程的学生可以进入该系统选择实验项目,根据实验指导书完成本次试验并填写实验报告,将完成的实验报告表进行提交。在课后教师可以批阅提交的实验报告,来核对学生本次试验情况并对学生提出相应的意见或建议。系统的数据流程图如图1-2所示:
图1-2 系统数据流程图
通过以上分析,首先可以确定实验报告管理系统有五个主要实体,分别为教师、学生、课程、实验项目和实验报告表。这五个实体及其主要属性说明如下,其中实体的关键字用下划线标识:
学生拥有属性:学号,姓名,专业,班级。
教师拥有属性:教师编号,姓名,所在部门。
课程拥有属性:课程号,课程名,教师编号,实验指导书。
实验项目拥有属性:实验项目号,课程名,题目,性质,类型。
实验报告表拥有属性:实验报告表号,学号,实验日期,学期,课程名,实验名,实验目的和要求,试验过程,实验分析,评语,指导教师姓名,批阅日期。
其次,可以确定实体之间有如下几个联系:学生和课程之间有联系选修,学生与实验报告之间有联系填写,教师和课程之间有联系讲授,教师和实验报告之间有联系批阅,课程与实验项目之间有联系包含,实验项目与实验报告之间有联系包含。在这六个联系中,“包含”、“填写”和“批阅”比较简单,不再拥有其他属性,而选修还拥有属性成绩,讲授还拥有属性时间和地点,详细分析如下:
包含(课程号,实验项目号)该联系的类别为1:n
包含(实验项目号,实验报告表号)该联系的类别为1:1
填写(学号,实验报告表号)该联系的类别为1:n
批阅(教师号,实验报告表号)该联系的类别为1:n
选修(学号,课程号,成绩)该联系的类别为m:n
讲授(教师编号,课程号,时间,地点)该联系的类别为m:n
按照上述的分析,画出局部E-R图如下:
图2-1教师讲授课程E-R图
图2-2学生选修课程E-R图
图2-3学生填写实验报告E-R图
图2-4教师批阅实验报告E-R图
图2-5课程包含实验项目E-R图
图2-6实验项目包含实验报告E-R图
综合各局部概念结构就可以得到反映用户需求的全局概念结构:
图2-7全局E-R图
一个实体型转换为一个关系模式,实体的属性就是关系的属性,实体的关键字就是关系的关键字,其中关键字用下划线标识:
学生(学号,姓名,性别,专业,班级)
教师(教师编号,姓名,所在部门)
课程(课程号,课程名,教师编号,实验指导书)
实验项目(实验项目号,课程名,题目,性质,类型)
实验报告表(实验报告表号,学号,实验日期,学期,课程名,实验名,实验目的和要求,试验过程,实验分析,评语,指导教师姓名,批阅日期)
一个1:1的联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并[1],在这里我们采用的是后者,将实验项目与实验报告之间的联系与“实验项目”关系模式合并:
实验项目(实验项目号,课程名,题目,性质,类型,实验报告表号)
一个1:n的联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并[1],而我们采用的是与n端对应的关系模式合并。
①实验项目与课程之间的联系与“实验项目”关系模式合并:
实验项目(实验项目号,课程名,题目,性质,类型,实验报告表号,
课程号)
②将学生与实验报告之间的联系与“实验报告”关系模式合并:
实验报告表(实验报告表号,学号,学年,学期,上机时间,课程名称,实验题目,实验目的和要求,试验过程,实验结果,实验分析,评语,指导教师姓名,批阅日期)
③将教师与实验报告之间的联系与“实验报告”关系模式合并:
实验报告表(实验报告表号,学号,学年,学期,上机时间,课程名称,实验题目,实验目的和要求,试验过程,实验结果,实验分析,评语,指导教师姓名,批阅日期,教师编号)
一个m:n的联系必须转换成一个独立的关系模式,与该联系相连的各实体的键以及联系本身的属性均转换为关系模式的属性,而关系模式的键为实体键的组合。[1]
①将教师与课程之间的联系讲授转换为一个独立的关系模式:
讲授(教师编号,课程号,时间,地点)
②将学生与课程之间的联系选修转换为一个独立的关系模式:
选修(学号,课程号,成绩)
通过前面的分析,我们最终得到的关系模式有:
学生(学号,姓名,性别,专业,班级)
教师(教师编号,姓名,所在部门)
课程(课程号,课程名,教师编号,实验指导书)
实验项目(实验项目号,课程名,题目,性质,类型,实验报告表
号,课程号)
实验报告表(实验报告表号,学号,学年,学期,上机时间,课程名称,实验题目,实验目的和要求,试验过程,实验结果,实验分析,评语,指导教师姓名,批阅日期,教师编号)
讲授(教师编号,课程号,时间,地点)
选修(学号,课程号,成绩)
由于关系模式都是不可再分的数据项,很显然为第一范式;但”实验报告表”中“指导教师姓名”依赖于“教师编号”,而“教师编号”依赖于主键(实验报告表号和学号的组合),所以“指导教师姓名”传递依赖于主键(实验报告表号和学号的组合),所以该关系模式中存在非主属性对码的传递函数依赖,所以最高满足第二范式。考虑各方面的因素,该模式满足实际应用的需要,故不需要拆分,已经为最优的模式。
通过以下语句来创建实验报告管理系统数据库:
create database 实验报告管理系统
on(
name='laboratoryReport_dat',
filename='D:\data\laboratoryReport_dat.mdf',
size=3,
maxsize=50,
filegrowth=1%)
log on
(
name= 'laboratoryReport_log',
filename='D:\data\laboratoryReport_log.ldf',
size=1,
maxsize=12,
filegrowth=10%)
SQL语句创建成功的截图如图4-1所示:
图4-1实验报告管理系统数据库的创建
①创建一个学生表,代码如下:
create table学生表
(
学号 char(11)notnull,
姓名nchar(5)notnull,
性别nchar(1) notnull,
专业nchar(12)notnull,
班级 char(10)notnull
)
②创建一个教师表,代码如下:
create table 教师表
(
教师编号 char(11)notnull,
姓名nchar(5)notnull,
所在部门nchar(50)notnull
)
③创建一个课程表,代码如下:
create table 课程表
(
课程号 char(11)notnull,
课程名nchar(10)notnull,
教师编号 char(11)notnull,
实验指导书char(100)not null
)
④使用图形工具创建实现项目表,其结构截图如图4-2所示:
图4-2实验项目表
⑤使用图形工具创建实验报告表,其结构截图如图4-3所示:
图4-3实验报告表
⑥使用SQL语句创建讲授表,代码如下:
create table 讲授表
(
教师编号 char(11)notnull,
课程号 char(11)notnull,
时间 datenot null,
地点nchar(20)notnull
)
⑦创建SQL语句创建选修表,代码如下:
create table 选修表
(
学号 char(11)notnull,
课程号 char(11)notnull,
成绩smallintnotnull
)
主键是唯一地标识一个实体的最小的属性组合,因此在设计表的时候,应该为每一个表都创建一个主键,下面是该系统中表中的主键的创建情况:
1) 学生表的主键是学号;
2) 教师表的主键是教师编号;
3) 课程表的主键是课程号
4) 实验项目表的主键是试验项目号
5) 实验报告表的主键是实验报告表号与学号的组合
6) 讲授表的主键是教师编号与课程号的组合
7) 选修表的主键是学号与课程号的组合
下面,选择四个实例来展示实现时的具体操作:
①通过下面的SQL语句为学生表的学号列创建主键:
alter table 学生表add primary key(学号)
②通过下面的SQL语句为教师表的教师编号创建主键:
alter table 教师表 add primary key(教师编号)
③通过图形工具为课程表的课程号列创建主键,创建成功的截图如图4-4所示:
图4-4课程表的课程号列创建主键图
④通过图形工具为实验报告表创建主键,主键为实验报告表号与学号的组合,创建成功的截图如图4-5所示:
图4-5实验报告表创建主键图
默认值约束是在不人工输入的情况下,默认插入到数据库的值,这只默认值约束方便输入,有较好的用户体验,并且有利于保证数据的完整性,根据实际应用的需要创建了下面四个默认值约束:
1) 学生表的“性别”列默认为“男”
2) 学生表的“专业”列默认为“信管”
3) 实验项目表的“性质”列默认为“必做”
4) 实验项目表的“类型”列默认为“设计”
选择四个实例来展示实现时的具体操作:
①通过下列SQL语句为学生表的“性别”列创建默认值约束,默认值为“男”:
alter table 学生表 add default('男') for 性别
②通过下列SQL语句为学生表的“专业”列创建默认值约束,默认值为“信管”:
alter table 学生表 add default('信管')for 专业
③通过图形工具为实验项目表的性质列创建默认值约束,默认值为“必做”,创建成功的截图如图4-6所示:
图4-6实验项目表的性质列创建默认值约束图
④通过下列图形工具为实验项目表创建默认值约束,默认值为“设计”,如图4-7所示:
图4-7实验项目表创建默认值约束图
外键是该表与另一个表之间联接的字段,是为了确保数据的完整性而设定的,在本数据库系统中,根据应用的需要,一共设定了七个外键,分别为:
1) 课程表中的“教师编号”列参照教师表的“教师编号”列
2) 实验项目表中的“课程号”列参照于课程表中的“课程号”列
3) 实验报告表中的“学号”列参照于学生表中的“学号”列
4) 讲授表中的“教师编号”列参照于教师表中的“教师编号”列
5) 讲授表中的“课程号”列参照于课程表中的“课程号”列
6) 选修表中的“学号”列参照于学生表中的“学号”列
7) 选修表中的“课程号”列参照于课程表中的“课程号”列
这里,我们选择两个实例来展示实现时的具体操作:
①通过下列SQL语句为课程表的教师编号列设置外键约束,参照教师表的教师编号:
alter table 课程表 add foreign key(教师编号) references 教师表(教师编号)
②
通过图形工具为实验项目表的“课程号”列创建外键约束,参照课程表的“课程号”,成功创建的截图如图4-8所示:
图4-8实验项目表的“课程号”列创建外键约束图
③因此,在这个系统中表之间的关系图如图4-9所示:
图4-9表之间的关系图
唯一值约束是保证一个字段中没有重复值,根据实际的需要,在这个数据库系统中我们总共创建了三个唯一值约束,分别为:
1) 实验项目表的“实验题目”列
2) 学生表的“姓名”列
3) 教师表的“姓名”列
下面是具体实现的操作:
①为实验项目表的题目列创建唯一值约束,SQL语句如下:
alter table 实验项目表 add unique(题目)
②为学生表的性别列创建唯一值约束,SQL语句如下:
alter table 学生表 add unique(姓名)
③使用图形工具为教师表的姓名列创建唯一值约束,如图4-10所示:
图4-10教师表的姓名列创建唯一值约束图
CHECK约束用来限制用户输入某一个列的数据,即在该列中只能输入指定范围的数据。根据实际的需要,在该数据库系统中共创建了三个check约束,分别为:
1) 学生表的“性别”列,其值只能取“男”或“女”;
2) 实验项目表的“性质”列,其值只能取“必做”或“选做”;
3) 实验项目表的“类型”列,其值只能取“验证”或“综合”或“设计”。
具体的实现如下所示:
①为学生表的性别列创建check约束,其值为“男”或“女”,SQL语句如下:
altertable 学生表 add check(性别='男' or性别='女')
②为实验项目表的性别列创建check约束,其值为“必做”或“选做”,SQL语句如下所示:
altertable 实验项目表 add check(性质='必做'or 性质='选做')
③为实验项目表的类型列创建check约束,其值为验证或综合或设计,如图4-11所示:
图4-11实验项目表的类型列创建check约束图
由于聚集索引中键值的逻辑顺序决定了表中相应行的物理顺序,因此,每个表中只能有一个聚集索引,在创建主键的时候,已经在主键列中创建了聚集索引,所以在该数据库系统中不能够创建聚集索引;唯一值索引在创建唯一值约束的时候也都创建成功,因此,在这里我们只需要创建非聚集索引,一共创建了五个非聚集索引,分别为:
a) 学生表的“姓名”列
b) 教师表的“姓名”列
c) 课程表的“课程名”列
d) 实验报告表的“教师编号”列
e) 选修表的“成绩”列
具体的实现如下所示:
①为学生表的姓名列创建非聚集索引,索引名为Sname_index,SQL语句如下所示:
create nonclustered indexSname_index on 学生表(姓名 ASC)
创建成功的截图如图4-12所示:
图4-12学生表索引创建图
②为教师表的姓名列创建非聚集索引,索引名为Tname_index,SQL语句如下所示:
create nonclustered index Tname_index on 教师表(姓名ASC)
创建成功的截图如图4-13所示:
图4-13教师表索引创建图
③为课程表的课程名创建非聚集索引,索引名为Cname_index,SQL语句如下所示:
create nonclustered index Cname_index on 课程表(课程名ASC)
创建成功的截图如图4-14所示:
图4-14课程表索引创建图
④为实验报告表的教师号创建非聚集索引,索引名为SYBG_Tnum,SQL语句如下所示:
create nonclustered index SYBG_Tnum on 实验报告表(教师号ASC)
创建成功的截图如图4-15所示:
图4-15实验项目表索引创建图
⑤为选修表的成绩列创建非聚集索引,索引名字为xxb_grade,SQL语句如下图所示:
create nonclustered index xxb_grade on 选修表(成绩 ASC)
创建成功的截图如图4-16所示:
图4-16选修表索引创建图
由于该系统的主要功能就是为了学生做实验服务的,所以通过学号检索该学生所选的课程,以及该课程所对应的实验指导书是经常需要进行的操作,因此,我们创建一个“个人课表”视图,方便用户查找;学生在做实验时,必不可少的操作就是查看教室布置的作业,因此通过课程名查找该课程所对应的实验题目也是经常进行的操作,为方便用户操作,为用户创建“作业”视图。下面是创建这两个视图的具体操作:
①创建一个学生实验课表的视图,该视图的名字为个人课表:
create view 个人课表
as
select学号,课程名, 实验指导书
from课程表,选修表
where课程表.课程号=选修表.课程号
withcheck option
执行该语句,成功创建该视图,如下图4-17所示:
图4-17个人课表视图
②创建一个学生的实验任务视图,该视图的名字是作业:
create view 作业
as
select课程名,实验项目号,题目,性质,类型
from课程表,实验项目表
where课程表.课程号=实验项目表.课程号
执行该语句,成功创建该视图,如下图4-18所示:
图4-18作业视图
①为学生表增加一个列,列名为学院,数据类型为nchar(n),并且要求非空。
SQL语句如下所示:
alter table 学生表add 学院 nchar(20)not null
通过执行该条SQL语句,可以为学生表增加一列,成功执行的结果如图5-1所示:
图5-1学生表增加学院列图
②为教师表增加一个列,列名为性别,数据类型为nchar(1),并且要求非空,在增加列的同时为该列创建check约束,约束名称为ck_Tsex,其值要么为男要么为女,SQL语句为:
alter table 教师表add 性别 nchar(1)constraint ck_Tsex check(性别='男'or 性别='女') not null
通过执行该条SQL语句,成功为教师表增加了一个姓名列,成功执行的结构如图5-2所示:
图5-2教师表增加性别列图
①给学生表插入一组数据,学号为14001,姓名为张三,专业为信管,班级为1402班,学院为计算机学院。
SQL语句如下所示:
insertinto 学生表values('14001', '张三','女', '信管', '1402班', '计算机学院')
通过执行该条语句,成功地为学生表插入一条纪律,其成功执行的结果如图5-3所示:
图5-3学生表插入一条记录图
②给教师表插入一条记录,教师编号为95001,姓名为李四,所在部门为信息系,性别为女,对应的SQL语句为:
insertinto 教师表values('95001', '李四', '信息系','女')
通过执行该条语句成功的为教师表插入一条记录,其成功执行的结果如图5-4所示:
图5-4教师表插入一条记录图
①将学生表中学号为14001的学生姓名改成“杜新新”,其SQL语句为:
update 学生表set 姓名='杜新新'where 学号='14001'
执行成功的结果如图5-5所示:
图5-5修改学生表中学号为14001的姓名为杜新新图
②将教师表中教师编号为95001的教师名改成“吴岩”,其SQL语句为:
update 教师表set 姓名='吴岩'where 教师编号='95001'
执行成功的结果如图5-6所示:
图5-6修改教师表教师编号为95001的姓名为吴岩图
①删除学生表中专业为计算机系的学生的信息
SQL语句如下所示:
delete from 选修表where 学号 in (select 学号from 学生表where 专业='计算机系')
执行成功的结果如图5-7所示:
图5-7删除选修表中计算机专业的学生图
②删除学生表中学号为14007的学生记录,其SQL语句如下所示:
delete from 学生表where 学号='14007'
成功执行的结果如图5-8所示:
图5-8删除学生表中学号为14007的学生图
①查询学号为14001的学生的姓名,专业,班级,其对应的SQL语句如下所示:
select 姓名,专业,班级
from 学生表
where 学号='14001'
成功执行的结果如图5-9所示:
图5-9选择学生表中学号为14001的学生的信息图
②查询教师编号为95001的教师的姓名和所在部门,其SQL语句如下所示:
select 姓名
from 教师表
where 教师编号='95001'
执行成功的结果如图5-10所示:
图5-10选择教师表中教师编号为95001的教师的姓名图
③查询实验报告号为16001并且学号为14001的学生的实验报告,其SQL语句如下所示:
select *
from 实验报告表
where 实验报告号=16001and 学号='14001'
成功地执行的结果如图5-11所示:
图5-11选择实验报告表中实验报告号为16001学号为14001的实验报告信息图
④查看课程名为数据库系统的实验指导书,其SQL语句如下所示:
select 实验指导书
from 课程表
where 课程名='数据库系统'
成功执行的结果如图5-12所示:
图5-12查看课程名为数据库系统的实验指导书图
①查询学号为14001的学生所选的课程
对应的SQL语句为:
select 课程名
from 学生表, 选修表, 课程表
where 学生表.学号=选修表.学号
and 课程表.课程号=选修表.课程号
and 学生表.学号='14001'
执行成功的截图如图5-13所示:
图5-13查找学号为14001的学生选修的课程名图
②查询课程名为数据库的实验题目
SQL语句为:
select题目
from 课程表, 实验项目表
where 课程表.课程号=实验项目表.课程号 and 课程名='数据库系统'
执行成功的结果如图5-14所示:
图5-14查询课程名为数据库的实验题目图
③查看所有教师所开课程的课程表
SQL语句为:
select 教师表.姓名, 课程名, 时间, 地点
from 教师表, 课程表, 讲授表
where 教师表.教师编号=讲授表.教师编号
and 课程表.课程号=讲授表.课程号
成功地执行结果如图5-15所示:
图5-15查看所有教师所开课程的课程表图
①创建“我的学生”存储过程
由于在进行批阅实验报告的时候,教师需要将她所教的学生的信息调出来,为了提高系统的性能,加快运行的速度,我们在“实验报告管理系统数据库”中创建用户存储过程“我的学生”,代码如下:
create procedure 我的学生
as begin
declare @学号 char(11), @姓名 nchar(5), @性别 nchar(1), @专业 nchar(12),@班级 char(10)
declareMS_cursorcursor for
select 学生表.学号,学生表.姓名,学生表.性别,专业,班级
from 学生表, 讲授表, 教师表,选修表
where 讲授表.课程号=选修表.课程号 and 选修表.学号=学生表.学号 and 讲授表.教师编号=教师表.教师编号 and 教师表.姓名='吴岩'
openMS_cursor
fetch next fromMS_cursor into @学号,@姓名,@性别,@专业,@班级
while@@FETCH_STATUS=0
begin
print @学号 + ' '+ @姓名+' '+@性别+''+@专业+' '+@班级
fetch next fromMS_cursor into @学号,@姓名,@性别,@专业,@班级
end
closeMS_cursor
deallocateMS_cursor
end
创建存储过程的代码成功执行的截图如图5-16所示:
图5-16创建“我的学生”存储过程图
执行存储过程“我的学生”的代码如下:
execute 我的学生
成功执行存储过程“我的学生”的截图如图5-17所示:
图5-17执行存储过程“我的学生”图
②创建“我的课程”存储过程
由于学生在进行实验的时候需要通过自己的学号查询自己这一学期所选的课程名称,为了提高系统的效率,可以为该功能创建一个存储过程,具体的实现代码如下所示:
create procedure 我的课程
as begin
declare @课程名 nchar(10)
declareMC_cursorcursor for
select 课程表.课程名
from 课程表,选修表
where 课程表.课程号=选修表.课程号 and 学号='14001'
openMC_cursor
fetch next fromMC_cursor into @课程名
while@@FETCH_STATUS=0
begin
print @课程名
fetch next from MC_cursor into @课程名
end
closeMC_cursor
deallocateMC_cursor
end
执行成功的结果如图5-18所示:
图5-18创建“我的课程”存储过程图
执行存储过程“我的课程”的代码如下所示:
execute 我的课程
执行成功的截图如图5-19所示:
图5-19执行存储过程“我的课程”图
①创建触发器“删除_报告_项目”
如果实验项目不存在,那么实验报告保存在数据库就没有意义了,所以,要实现在删除实验项目的同时将它对应的实验报告也同时删除,因此创建下面触发器,该触发器的名字为删除_报告_项目,实现代码如下所示:
create trigger 删除_报告_项目
on 实验项目表
for delete
as
begin
if exists(select 实验项目号 from deleted)
begin
select * from deleted
delete from 实验报告表 where 实验报告号=(select 实验项目号 from deleted)
end
end
执行成功的截图如图5-20所示:
图5-20创建触发器“删除_报告_项目”图
②创建触发器“更新_报告_项目”
由于实验报告号参照实验项目号,他们之间是一一对应的关系,因此在对实验项目号进行修改的同时要求实验报告也随之发生变化,所以创建一个更新触发器,起名字为更新_ 报告_项目,具体的代码实现如下所示:
create trigger 更新_报告_项目
on 实验项目表
for update
as
begin
if exists(select 实验项目号 from deleted)
begin
update 实验报告表
set 实验报告号=(select 实验项目号 from inserted)
where 实验报告号=(select 实验项目号 from deleted)
end
end
创建成功的截图如图5-21所示:
图5-21执行触发器“删除_报告_项目”图
在本次课程设计中,真实地接触了数据库系统的设计与实现。经过数据库系统分析、概念结构设计、逻辑结构设计、物理结构设计,逐步地将实验报告管理系统的数据库建立了起来,这是我第一次完整地开发一个系统,感到无比的激动和兴奋。在开始设计这个系统,了解这个系统的需求时,查阅了很多文献,但还是不太了解,最后在老师的帮助下,经过了一星期的时间,才将前面的功能需求、性能需求分析和数据流程图结束,在进行概念结构设计的时候,由于对E-R图的理解不够深入,将对数据的具体操作画到了E-R图中,在老师的指导下进行了纠正;在进行物理结构设计的时候,由于需要考虑表之间的关系,由于有些主键设置的不符合实际情况,从而导致没有办法创建外键,在老师的帮助下进行了修改,完成了数据库的物理结构设计。由于在概念结构设计的时候思路的不够成熟,导致在物理设计的时候发现了错误,又返回到概念结构设计,重新进行了概念结构设计,浪费了大量的时间和精力。虽然在课程设计前,老师再三的强调,在需求分析和概念结构设计的时候一定要考虑全面再开始下手,但是最终还是犯下了同样的错误,看来在进行物理结构设计之前将系统设计全面很难,只能做到尽量地考虑完全以避免在后期返工。
通过一学期的数据库课程的学习,只是掌握了数据库的理论知识,但是从理论到实践又是一个很大的挑战,在这两星期的课程设计中,亲身的感受了一下设计一个完整的数据库系统的全过程。在完成实验报告管理系统的数据库设计之后,感觉自己对数据库设计不再是局限于数据库的创建和表的创建,而是要从实际出发,结合用户的需求来设计数据库,并且对约束的选择,主键、外键的选择也是一个繁琐的过程。总之,通过此次课程设计,我感到获益匪浅,但是唯一的不足之处就是不能将该系统实现出来,希望下次能够做的更加完美。
[1]赵文涛. 数据库系统与应用. 中国矿业大学出版社.2012
[2]http://www.cnki.net/KCMS/detail/detail.aspx?QueryID=0&CurRec=1&filename=1015006243.nh&dbname=CMFD201501&dbcode=CMFD&pr=&urlid=&yx=&uid=WEEvREcwSlJHSldRa1FhcTdWYVFpVWZZZno4cWpNSVJ1V2FHUysvNVd4cz0=$9A4hF_YAuvQ5obgVAqNKPCYcEjKensW4ggI8Fm4gTkoUKaID8j8gFw!!&v=MTM2NzF0RnkvbVZyL09WRjI2RzdPNEdOUElySkViUElSOGVYMUx1eFlTN0RoMVQzcVRyV00xRnJDVVJMeWVaZVI=
[3]http://wenku.baidu.com/link?url=Qk_bJTBHJmFJV8y9mZUmZoXBCfMF512291Cs1SKOi1lG7JHTYja20iZu9jwyGeg0RfvU6U2XNMDdYjBJyqhOkQmZtYY-NkSq412oU1KY3Qi