题库管理系统
TYYGROUP system office room 【TYYUA16H-TYY-TYYYUA8Q8-
《数据库课程设计》
—题库管理系统1需求分析
学校的题库管理系统
实现课程、题型等基本信息的管理;
能管理每一门课程的题型,每门课程的章节;
实现习题信息的管理,能按题型或章节录入每门课程的习题;
定义存储过程查询指定课程各种题型和各章节的习题数量;
定义视图查询各门课程使用的题型;
设每个习题有一个题号,题号由系统自动生成,要求从1开设编号;
设每个习题都有习题的建立日期,其值为系统时间,请定义实现(用默认实现);
定义存储过程实现查询各门课程、各种题型的习题数量;
可以自动抽题组成套题,习题每抽取一次,要使习题的抽取次数加1(用触发器实现);
建立数据库相关表之间的参照完整性约束。
2任务概述
、数据字典
数据结构:学生
组成:学号,姓名,性别,系别
说明:学生表所存放的是学生的信息,学号为学生的用户名,是唯一的,设为主码。
数据结构:任课老师
组成:职工号,姓名,性别,系别
说明:任课老师表所存放的是任课老师的信息,职工号为任课老师的用户名,是唯一
的,设为主码。
数据结构:课程
组成:课程名,课程号,章节号
说明:课程表存放课程的相关信息,课程号是课程的唯一标识,设为主码。
数据结构:授课
组成:课程号,教师号,学号
说明:授课表存放任课老师和学生之间的授课关系。课程号,教师号和学号属性组是
授课表的唯一标识,设为主码。
3数据库概念设计
、局部概念模式设计
在系统界定范围内,将静态数据对象或逻辑上具有独立意义的概念抽象为实体集,如学生、任课教师、课程负责人、测验卷、课程习题、课程等。从数据字典的角度来看,可将数据源点和数据结构作为实体集,而把数据处理抽象为实体间的联系。
:
、E-R图表示数据库的概念结构
下图为课程责任人、任课教师、学生、课程、课程习题、测试卷实体集之间的关系E-R图
任课老师和测试卷的E-R图
任课老师和课程的E-R 图
任课老师和学生的E-R 图
测试卷和课程习题的E-R 图
任教老师和题型的E-R图
四. 数据库逻辑设计
数据模型映射
由E-R图导出一般关系模型的四条原则
原则1:E-
R图中的每一个独立实体变换为一个关系,其属性变为关系的属性,其主标识变为关系的主码。
原则2:E-
R图中的从实体及相应的“的”联系变换为一个关系,从实体的属性加上主体关系的主码构成这个关系的属性。如果“的”联系是1:1的,则以主实体关系的主码(作为外来码)为这个关系的主码;如果“的”联系是1:M的,则以主实体关系的主码加上同一主实体个体联系的不同从属实体个体赖以相互区分的属性组,组成该关系的主码。
原则3:1:M联系通过在“多”实体关系中增加相联系的“1”实体关系的主码及联系本身的属性来表达。其中“1”实体主码为外来码。
原则4:M:M联系转换成一个独立的关系,被联系实体关系的主码(作为外来码)和联系本身的属性作为该关系的属性,被联系实体关系的主码组成其复合主码。
将数据库概念模式映射为数据库逻辑模式,也就是把E-
R模型转换为关系模型。既分别将每个实体集转换为关系,再将每个联系集也转换为关系。将实体集映射为关系:
学生(学号,学生姓名),学号是主码。
授课(课程号,职工号,,学号),(课程号,职工号,学号)是主码。
任课教师(职工号,姓名,性别),职工号是主码。
测验卷(试卷号,试卷名,课程号,题量,测试时间,难度),(试卷号,试卷名,课程号)是主码。
课程习题(课程号,章号,节号,建立日期,难度,题号,题目内容,答案),(课程代号,章号,节号,建立日期,难度,题号)是主码。
选择(试卷号,课程号,题目内容),(试卷号,课程号)是主码。
解答(课程号,试卷号,学号,记录号,成绩),(课程号,试卷号,学号,记录号)是主码。
题型(题名,题号,题类别),(题名,题号)是主码。
章(章号,章名,章内容),(章号)是主码。
节(节号,节名,节内容),(节号)是主码
包含(章号,节号),(章号,节号)是主码。
建立数据库
题库管理系统的数据库表的结构说明
五.物理设计
建立数据库
create database 题库管理建表
1.学生表
create table SB
(Sno char(10)primary key, Sname char(10),
Sex char(2),
Sdept char(10),
)
2.任课老师
create table RKJS
(Tno char(10)primary key, Tname char(10),
Sex char(2),
Sdept char(10)
)
3.课程表
create table Kc
(kcno char(10),primary key, kname char(10),
kzhang char(10),
)
4.课程习题表
create table KCXT
( Cno char(10),
Zno char(10),
Jr datetime,
Nd char(10),
Tno int identity(1,1),
Tn varchar(50),
Answer char(50),
primary key(Cno,Zno,Nd,Jr,Tno),
foreign key(KCno) references KC(KCno) )
5测试卷表
create table CYJ
( SJno char(10),
Cno char(10),
SJname char(10),
Tl char(2),
Ttime char(10),
Nd char(10),
primary key(SJno,Cno,SJname),
foreign key(KCno) references KC(KCno) )
6授课表
create table SK
(kcno char(10),
Tno char(10),
Sno char(10),
primary key(kcno,Tno,Sno),
foreign key(kcno)references KC(kcno), foreign key(Tno)references RKJS(Tno), foreign key(Sno)references SB(Sno)
)
7.选择表
create table XD
(
SJno char(10),
Kcno char(10),
Tmnr char(20),
primary key(SJno,Cno,),
foreign key (Kcno) references KC(Kcno) )
8.解答表
create table JD
( Kcno char(10),
SJno char(10),
Sno char(10),
Grade char(4),
primary key (Kcno,SJno,Sno,JLno),
foreign key (Kcno) references KC(Kcno),
foreign key (Sno) references SB(Sno)
)
9.题型
create table TX
(TXno char(10) primary key,
TXname varchar(50),
LBM char(20)
)
建立索引和进行数据操作
create index index_SB on SB(Sno);
create index index_RKJS on RKJS(Zgno);
create index unique index_CYJ on CYJ( SJno, Cno,SJname);查询学生成绩:
select Grade from JD
查询题目的答案:
select Ans
from KCXT
where Cno=1 and Zno=第一章and Zsddh=1 and Nd=简单and Tno=1 查询测验卷:
select *
from CYJ,KCXT
where
= and
SJno=2009001 and
Cno=1
and
定义存储过程
create procedure findType
@Tno char(10) @Tname char(10) @Tlb char(6)
as
select @Tno=Tno,@Tname=Tname,@Tlb=Tlb
from TD
declare @Tno @Tname @Tlb
create procedure findNum
@Cno char(10) @Zno char(10)
as
begin
if(select count(*) from SK where Cno=@Cno)>0
begin
if(select count(*) from KCXT where Cno=@Cno
and Zno=@Zno)>0
select count(Zno) from SK,KCXT where Cno=@Cno and Zno=@Zno
and =
else
print'章节号'+@Zno'不存在'
end
else
print'课程号'+@Cno+'不存在'
end
创建视图及查询
create view tx
as
select Cno,Tno,Tname,Tlb
from KCXT,TD
where=
select*from tx
where Cno=1
每个习题都有习题的建立日期,其值为系统时间
习题增加建立日期
insert into KCXT
values(03,01,GETDATE(),'简单','1+1','2')
触发器
可以自动抽题组成套题,习题每抽取一次,要使习题的抽取次数加1(用触发器实现);
抽题属于select操作,没有对应的触发器,所以可以建立一个表记录抽取的套题,利用这个表的insert触发器更新习题库表中习题被抽取的次数。
触发器:
所有的习题存放在表XTbank(num,XT)中,(num)为抽取的题号,XT为(num)抽取的题型,被抽取的习题存放在表new XTbank(nums)中
Create trigger addXTbank
On newXTbank
For insert
As
Begin transaction //开始检查
Update XTbank
Set XT=XT+1
Where num in(selset nums
From inserted)
Commit transaction //执行
Go
参照完整性约束
alter table SB
add constraint un_Sno unique(Sno);
alter table RKJS
add constraint un_Zgno unique(Zgno);
alter table KCXT
add constraint un_Cno unique(Cno);
alter table CYJ
add constraint un_Sjno unique(Sjno);
alter table SB
add constraint pk_SB primary key(Sno)
alter table SK
add constraint pk_SK primary key(Cno)
alter table RKJS
add constraint pk_RKJS primary key(Sno,Cno)
alter table KCXT
add constraint pk_KCXT primary key(Cno,Zno)
alter table TD
add constraint pk_TD primary key(Tno)
alter table CYJ
add constraint pk_CYJ primary key(Sjno,Cno)
alter table SK
add constraint fk_Sno foreign key (Sno) references SB(Sno);
alter table SK
add constraint fk_Cno foreign key (Cno) references KCXT(Cno);
alter table SK
add constraint fk_Zgno foreign key (Zgno) referencesRKJS(Zgno);
alter table XD
add constraint fk_Sjno foreign key (Sjno) references CYJ(Sjno);
alter table XD
add constraint fk_Cno foreign key (Cno) references KCXT(Cno);
alter table JD
add constraint fk_Cno foreign key Cno) references KCXT(Cno);
alter table JD
add constraint fk_Sjno foreign key (Sjno) references CYJ(Sjno);
alter table JD
add constraint fk_Sno foreign key (Sno) references SB(Sno);
alter table SB
add cconstraint ck_Sex check(Sex=’男’);
alter table RKJS
add cconstraint ck_Sdept check(Sdept=’数学系’);
alter table KCXT
add cconstraint ck_Nd check(Nd=’难’);
alter table SB
add cconstraint ck_Sex check(Sex in (‘男’,’女’));
alter table RKJS
add cconstraint ck_Sdept check(Sdept in(’数学系’,’计算机系’,’物理系’)); alter table KCXT
add cconstraint ck_Nd check(Nd in(’难’,’较难’,’简单’));
alter table SB
add constraint ck_Sname check(Sname like ‘%王’);
alter table RKJS
add constraint ck_Zname check(Zname like ‘%王’);
alter table SB
add constraint ck_Sex_default default (‘男’) for Sex;
alter table RKJS
add constraint ck_Sdept_default default (‘计算机系’) for Sdept;
六.心得体会
一星期半的数据库课程设计很快就过去了,虽然只有短短一星期半的时间但是自己学会了很多东西,特别复习了自己所学过的相关数据库知识,进一步了解了数据库的应用过程,增强了自己的动手能力。当然也遇到了很多问题,到现在都还有些不清楚。
数据库设计主要讨论数据库设计的方法和步骤,每个设计阶段都有各自的目标、方法和应注意的事项。王冲的负责部分主要为数据字典的编写,存储结构和参照完整性约束三部分,其中,数据字典是此次设计的基础,需要对课题进行分析,确认其实体和属性,存储过程也是按老师上课讲的,完整性约束则是参照老师给的文件进行编写,有的地方我也还是不清楚。
吕瑞负责的是E―R图和建表,触发器部分,根据数据字典分析之间的关系,做出E―R图,根据所创建的数据库表,创建数据库,由触发器实现去更加完善题库。高飞宏负责的是创建数据库表,建立索引以及数据的操作,和视图的建立,以及题号从一自动排序和建立日期的实现。
总之,这次的课程设计让我们学到了很多有用的东西。