在线考试系统数据库设计

1. 在线考试系统需求

所谓需求分析,就是指分析软件用户的需求是什么。现实生活中不管做什么,肯定需要一 个理由,那么需求分析就是我们做软件的理由,它可以告诉我们客户为什么要做这个软件,以及客户想要把这个软件做成什么样的。

做软件不可以闭门造车,如果我们花费了大量的人力、物力、财力,而开发出来的软件却不是客户需要的,那么我们所做的工作都是徒劳的。如何避免这种情况呢?需求分析就是解决该类问题的首要条件。下面就对在线考试系统进行整体的分析。

开发该系统的目的就是方便老师和学生,为老师和学生提供一个平台。利用该系统,老师可以足不出户就能为学生制定要考核的内容,而学生也可以足不出户地利用该系统的题目检测自己的知识掌握程度。

既然是考试系统,那么就要有出题的一方和做题的一方。系统中要求老师出检测试卷和判卷,而学生只可以答卷和提问。在这两类对象外,还需要有管理者,它们可以协调整个考试过程,例如,安排测试时间,指定出题教师,以及指定判卷老师等。作为一个系统还需要有一个权限管理者,他可以维护系统的基础信息,例如在数据库中增加老师、管理者或学生。

流程图如下:

系统流程图.png

2. 模块设计

系统通常由几个模块组成,毎个模块负责自己专有的功能,如果一个模块调用另一个模块, 可以利用接口来实现,这样的系统才能健壮,易于维护。

2.1 模块分类

模块的分类也可以让使用人员更方便,由于职责所在,毎个不同职责的人只允许在指定的 模块处理数据。除此之外,分成模块,也能使开发变得更具目的性,指定不同的开发组或个人 来完成不同的模块,这样就避免在开发过程中出现过多的交集。如果开发的项目交集过多,那 么可能出现分工不明确、工作效率低下等情况。 在线考试系统根据需求可以分成如下几个模块:用户权限管理模块、出題模块、考试模块、 考试管理模块、判卷模块、教学管理模块、基本信息模块.

各模块功能介绍如下:

1)用户权限管理模块。

该模块主要针对已有的用户,由于毎个用户的职责不同,所以允 许他们所做的操作也不相同。该模块中利用角色来给用户分配权限,用户拥有什么角色,他就 能做相关操作。其他操作将不被允许。

2)出题模块。

该模块只允许出題老师登录,老师可以根据实际的教学计划进行试卷编写。 对于选择题和判断题,可以利用系统提供的模板完成。

3)考试模块。

学生登录成功后,进行信息验证,符合考试资格则可见考试信息,此时不 能答卷,当到计时指定时间方可答卷。当考试时间剩余15分钟时,系统提示考生剩余时间。交卷分为人工提交试卷和系统自动提交。

4)考试管理模块。

教学管理人员或老师可以使用该模块功能,利用该模块可以管理考试 试卷和学生提交的试卷,并提供现场在线咨询功能。

5)判卷模块。

判卷老师可以登录,进行判卷。

6)教学管理模块。

教学管理者可以操作。在该模块中可以指定试卷的出题教姉、考试时 间和判卷教师,列出考试安排的明细信息。

7)基本信息模块。

包括用户基本信息。用户是指所有用户以及各种字典表。

2.2 数据库总体结构

该系统中一共包含了 16张表

序号 表名 说明
1 Sys_User 用户信息表
2 Sys_Roles 角色表
3 Sys_ Resource 资源表
4 Sys_User_Roles 用户角色表
5 Sys_Role_Resource 角色资源表
6 Teachers 教师表
7 Managers 教务人员表
8 Duty 职责表
9 Students 学生表
10 Courses 课程表
11 CoursesType 课程类型表
12 Student_Course 学生选课关系表
13 Exam 考试表
14 ExamPaper 试卷表
15 AnswerPaper 学生答卷表
16 Graders_Exam 考试批卷关系表

2.3 数据库表结构

1)用户信息表(Sys_User)

用户信息表记录了所有的系统中的用户信息,并表名该用户是否可用。

字段 数据类型 长度 允许空 说明
userId varchar2 10 N ID,主键
userName varchar2 20 N 用户名
passWord varchar2 32 N 密码
identity varchar2 10 N 身份
userState char 1 N 用户状态:1-正常,0-禁用
reamrk varchar2 200 Y 备注

2)角色表

角色表定义了系统中可能用到的角色。

字段 数据类型 长度 允许空 说明
roleld varchar2 10 N ID,主键
roleName varchar2 20 N 角色名

3)资源表

资源表定义了系统中的所有资源,也就是URL,可以为角色指定拥有的URL操作

字段 数据类型 长度 允许空 说明
resourceld varchar2 10 N ID,主键
ResourceName varchar2 50 N 资源名称
ResourceUrl varchar2 100 Y URL地址

4)用户角色表

字段 数据类型 长度 允许空 说明
Userid varchar2 10 N 引用Sys_User表,主键
Roleld varchar2 10 N 引用Sys_Roles表主键,主键

5)角色资源表

字段 数据类型 长度 允许空 说明
RoleId varchar2 10 N 引用自Sys-Roles表主键,主键
ResourceId varchar2 10 N 引用自Sys-Resource表主键,主键

6)教师表

字段 数据类型 长度 允许空 说明
teacherId varchar2 10 N 教师编号,主键
teacherName varchar2 20 N 教师姓名
duty varchar2 100 Y 职务,可以存储多个职务编码
remark varchar2 200 Y 备注、

7)教务人员表

字段 数据类型 长度 允许空 说明
managerId varchar2 10 N 教务人员编号,主键
managerName varchar2 20 N 教务人姓名
duty varchar2 100 Y 职务,可以存储多个职务编码
remark varchar2 10 Y 备注、

8)职务表

字段 数据类型 长度 允许空 说明
dutyId varchar2 10 N 职务ID,主键
dutyName varchar2 50 Y 职务名称
remark varchar2 200 Y 备注

9)学生表

字段 数据类型 长度 允许空 说明
studentId varchar2 10 N 学生学号,主键
studentName varchar2 20 Y 学生姓名
Grade number (3.0) Y 年级
className varchar2 20 Y 班级名称

10)课程表

字段 数据类型 长度 允许空 说明
courseId varchar2 10 N 课程编号,主键
courseName varchar2 10 N 课程名称
courseType varchar2 4 N 课程类型

11)课程表类型

字段 数据类型 长度 允许空 说明
courseTypeId varchar2 4 N 课程类型编号,主键
courseType varchar2 20 N 课程类型名称

12)学生选课关系表

字段 数据类型 长度 允许空 说明
studentId varchar2 10 N 表主键,主键
courseId varchar2 10 N 表主键,主键
term varchar2 20 N 选课学期

13)考试表

字段 数据类型 长度 允许空 说明
examId varchar2 4 N ID,主键
startDate date N 开始考试时间
endDate date N 考试结束时间
courseId varchar2 10 N 课程ID
publisherId varchar2 10 Y 出卷教师ID
term varchar2 20 Y 学期

14)试卷表

字段 数据类型 长度 允许空 说明
paperId varchar2 10 N 考试试卷的ID,主键
examId varchar2 10 N 考试ID
courseId varchar2 10 N 课程ID
publisherId varchar2 8 N 出卷人
paperCode varchar2 10 Y 卷号
duration numberq 8 Y 考试时间
totalScore number (8,1) Y 总分
sunmitState number 2 N 出卷状态
uri varchar2 200 Y 试卷存放地址

15)学生答卷表

字段 数据类型 长度 允许空 说明
anwpaperId varchar2 10 N 学生答卷ID,主键
studentId varchar2 10 N 学生ID
examId varchar2 10 N 考试ID
totalScore number (8,1) Y 学生得分
availability char 1 Y 是否有效
submitTime timestamp N 交卷时间
isFinish char 1 Y 是否交卷
uri varchar 200 Y 交卷地址

16)考试批卷关系表

字段 数据类型 长度 允许空 说明
Id varchar2 10 N ID,主键
paperId varchar2 10 N 考试试卷ID
teacherId varchar2 10 N 判卷教师ID
subjectNumber number 3 N 试卷中的大题号

2.4 建表脚本

  1. 用户信息表(Sys_User)
CREATE TABLE SYS_USER
(
  USERID VARCHAR2(10) NOT NULL,
  USERNAME VARCHAR2(20) NOT NULL,
  PASSWORD VARCHAR2(32) NOT NULL,
  IDENTITY VARCHAR2(10) NOT NULL,
  USERSTATE CHAR(1) NOT NULL,
  REMARK VARCHAR2(200),
  PRIMARY KEY (USERID)
);
  1. 角色表(Sys_Roles)
CREATE TABLE SYS_ROLES
(
  ROLEID VARCHAR2(10) NOT NULL,
  ROLENAHE VARCHAR2(20) NOT NULL,
  PRIMARY KEY (ROLEID)
);
  1. 资源表(Sys_Resource)
create table sys_resource
(
  resourceId varchar2(10) not null,
  resourceName varchar(50) not null,
  resourceUrl varchar(100),
  primary key(resourceId)
);
  1. 用户角色表(Sys_User_Roles)
CREATE TABLE SYS_USER_ROLES (
  USBRID VARCHAR2(10) NOT NULL, 
  ROLEID VARCHAR2(10) NOT NULL 
);
  1. 角色资源表(Sys_Role_Resource)
CREATE TABLE SYS_ROLE_RESOURCB (
  ROLEID VARCHAR2(10) NOT NULL,
  RBSOURCBID VARCHAR2(10) NOT NULL 
);
  1. 教师表(Teachers)
CREATE TABLE TEACHBRS
(
  TEACBERID VARCHAR2(10) NOT NULL, 
  TBACHBRNAME VARCHAR2 ( 20 ) NOT NULL, 
  DUTY VARCSAR2(10),
  REMARK VARCHAR2(200), 
PRIMARY KEY (TSACHERID)
  1. 教务人员表(Managers)
CREATE TABLE MANAGERS
(
  MANAGBRID VARCHAR2(10) NOT NULL, 
  MANAGERNAHE VARCHAR2(20) NOT NULL, 
  DUTY VARCHAR2(10),
  REMARK VARCHAR2(200),
  PRIMARY KEY(MANAGBRID)
);
  1. 职务表(Duty)
create table duty
(
  DUTYID VARCHAR2(10) NOT NULL,
  DUTYNAME VARCHAR2(50), 
  REMARK VARCHAR2(200), 
  PRIMARY KEY (DUTYID)
);
  1. 学生表(Students)
CREATE TABLE STUDENTS
(
  STUDENTID VARCHAR2(10) NOT NULL, 
  STUDENTNAME VARCHAR2(20),
  GRADE NUMBER(3,0),
  CLASSNAME VARCHAR2(20),
  PRIMARY KEY (STUDENTID)
);
  1. 课程表(Courses)
create table courses
(
  COURSEID VARCHAR2 (10) NOT NULL, 
  COURSENAME VARCHAR2(10) NOT NULL, 
  COURSESTYPE VARCHAR2 ( 4 ) NOT NULL, 
  PRIMARY KEY (COURSEID)
);
  1. 课程类型表(CoursesType)
create table coursesType
(
  COURSESTYPEID VARCHAR2(4) NOT NULL,
  COURSESTYPE VARCHAR2(20),
  PRIMARY KEY (COURSESTYPEID)
);
  1. 学生选课关系表(Student_Course)
create table student_course
(
  studentId varchar2(10) not null,
  courseId varchar2(10) not null,
  term varchar2(20)
);
  1. 考试表(Exam)
CREATE TABLE EXAM
(
  EXAMID VARCHAR2(10) NOT NULL, 
  STARTDATE DATE NOT NULL, 
  ENDDATE DATE NOT NULL,
  COURSEID VARCHAR2(10) NOT NULL,
  PUBLISHERID VARCHAR2(10),
  TERM VARCHAR2(20), 
  PRIMARY KEY (EXAMID)
);
  1. 试卷表(ExamPaper)
CREATE TABLE EXAMPAPER
(
  PAPBREID VARCHAR2(10) NOT NULL, 
  EXAMID VARCHAR2(10) NOT NULL, 
  COURSEID VARCHAR2(10) NOT NULL, 
  PUBLISHERID VARCHAR2 ( 8 ) NOT NULL, 
  PAPERCODE VARCHAR2(10),
  DURATION NUMBER(8,0), 
  TOTALSCORE NUMBER(8,1),
  SUBMITSTATB NUMBER(2,0) NOT NULL,
  URI VARCHAR2(200), 
  PRIMARY KEY (PAPBREID) 
);
  1. 学生答卷表(AnswerPaper)
CREATE TABLE ANSWERPAPER
(
  PAPEREID VARCHAR2(10) NOT NULL, 
  STQDBNTID VARCHAR2(10) NOT NULL, 
  BXAMID VARCHAR2(10) NOT NULL, 
  TOTALSCORE NUMBER(8,1), 
  AVAILABILITY CHAR(1) NOT NULL, 
  SUBMITTIHE TIMESTAMP NOT NULL, 
  ISFINISH CHAR(1) NOT NULL, 
  URI VARCHAR2(200),
  PRIMARY KEY (PAPEREID)
);
  1. 考试批卷关系表
create table grades_exam
(
  ID VARCHAR2(10) NOT NULL, 
  PAPERID VARCHAR2(10) NOT NULL, 
  TBACHBRID VARCHAR2(10) NOT NULL, 
  SUBJECTNUMBBR NUMBER(3,0) NOT NULL, 
  PRIMARY KEY (ID)
);

3. 小结

本章用一个实例系统介绍了如何设计数据库,设计数据库前一定要有比较充分的需求分析, 做到基本了解用户的需求。设计数据库时,要按照模块的形式进行设计,做到业务分明,减少耦合度,使得系统更加健壮。设计数据库时不可避免地要考虑各表之间的关系,如非必要,设计时尽量把表的主外键关系放到程序中处理,而不是在数据库里处理,这样可以在一定程度上提高数据库的性能。

习题

思考题
设计一个订餐系统的数据库,要求用户只能由系统管理员创建,普通用户能从已有的餐饮 列表中选取食品,并能査看本人某时间段内的订餐明细记录和存款情况,也能査看其他人员当 天的订餐具体情况。至于存款情况,只能由订径人员操作。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容