数据库原理在线考试系统核心功能研究与设计
2020-10-17张旭东杨鹏斐
张旭东,杨鹏斐
(兰州财经大学信息工程学院,甘肃 兰州 730000)
1 概述
数据库原理课程是信息管理类专业的核心课程,学生人数较多,对在线考试需求比较迫切。随着互联网技术的发展,B/S结构的在线考试系统已经在高校的部分课程中得到应用,如计算机基础、C语言、数据库基础等课程,对通用考试系统的研究从未停止[1-3],但数据库课程内容和考核方式的不同,考试系统的研究和设计仍停留在客观题方面,主观题方面的由于以简答和论述题目以文字的方式呈现答案,数理类课程以字符和采用字符的逻辑推理为参考答案,计算机和信息管理类课程以图表或程序的方式呈现[4],对主观题自动考试和阅卷研究和系统,目前基本采用半自动化设定评分项、由教师在线评分的半自动化阅卷方式[5]。
文章以数据库原理课程的在线考试和自动阅卷为背景,研究数据库原来在线考试系统的核心功能。以SQL语句、E-R图关系代数和关系规范化四类主观题型的在线考试和阅卷为核心,提出实现数据原理课程在线考试系统的核心功能设计和实现方法。
2 国内外研究现状
国外大量应用了软件系统进行考试。Gerard Salton在提出的向量空间模型用于分析简答问题中的英文文本相似度[6,7]。Vladimir Oleshchuk 等人提出了文本相似度计算方法,Carbone II等人提出的最大边缘相关方法,这些算法作为填空、名词解释和简答题型的阅卷算法[8]。在线考试系统的研究主要集中在词法分析、语法分析、语义推断方面[9,10]。
国内在在线考试系统方面的研究成果很多,但在数据库原理考试系统的研究成果较少。在商用考试系统方面万维捷通[11]研发的在线考试系统对于数据库基础课程的考试只支持图形化界面的SQL执行和阅卷。清华泰豪网络考试系统具有一定的代表性,该系统几乎覆盖了教学考试过程的各大环节,是一个功能完善的辅助教学系统,其主要功能有题库创建与管理、自动组卷、在线练习、在线测试、自动统计并分析成绩数据等[12]。全国计算机等级考试系统中实现了MySQL中的SQL语句和E-R图在线考试,但该系统没有公开。关系数据库上机考试系统组卷算法的研究与探讨[13]重点研究组卷,没有体现出该课程核心内容题型。关系数据库上机考试系统[14]一文中仅对SQL语句类题目的考试和阅卷进行了探讨,对于课程整体内容的考试不具有全面性。数据库原理无纸考试系统的设计与实现[15]一文中只总体设计了关系代数、SQL语言自动评分的方法。ORACLE数据库上机考试系统的设计与实现[16]中设计ORACLE数据库考试的考试系统,需要连接到数据库管理工具进行操作。数据库原理课程在线评卷系统的设计与实现[17]参考编辑距离和VSM在自然语言文本处理上的应用,重点在语法和词法分析,在简答、SQL语句和关系规范化方面有一定的参考价值、但没有考虑E-R图。论文[18-20]设计了关系代数转为SQL语句的在线教学系统,无法用于在线考试。
现有研究成果和系统在在线考试过程中发挥了重要的作用,但研究内容或者只侧重于系统的总体设计,并未全部涵盖数据库概论课程考试的所有内容。本文分析数据库原理课程内容的特殊性,设计并实现针对该课程中四种常见题型考试系统核心功能,并结合现有考试系统的优点为数据库原理课程提供较为全面的考核方法。
3 在线考试系统核心功能设计
数据库原理在线考试系统的设计中,系统中辅助性的功能在包括用户管理、题目管理、组卷、评卷、考试过程管理、成绩管理等功能,这些现有考试系统中较为常见的功能在此不再详细介绍,以下仅设计SQL语句、关系代数、函数依赖和E-R图中核心知识点的在线考试和阅卷功能,将对每个功能的设计分为题目设置、考试过程、自动阅卷三部分展开,系统功能的设计选用ASP.NET和SQLServer。
3.1 SQL语句
SQL语句的是数据库原理课程中核心内容之一,每次考试中需要设计大量的题目考查学生对SQL的掌握情况。SQL语句分为数据定义、数据操纵、数据查询和数据控制四种类型你,本文主要对数据操纵、数据查询两种类型的SQL语句设计考试功能。SQL语句正确性的判定分为两步,分别是语法正确和执行结果正确,语法的正确性采取语句合法性检查,并提交到SQL语句到数据库管理工具编译获取语法错误,执行结果的正确性通过比对实现。
SQL语句题目设置按照两层树结构,其中树根节点为题目主题干,多个叶子节点中,每个叶子节点为一个SQL语句的问题,每个问题称为子题目。根节点中的主题干包含对查询目标数据库进行描述和解释,以及创建该查询目标数据库的SQL脚本。叶子节点中的子题目设定问题的精确描述和该问题对应的答案。
SQL语句的考试过程是抽题和答题过程的结合。按照主题干个数和每个主题干包含的子题目数量进行抽题,并设置每个子题目的分值。当学生进入该题目进行考试时,系统首先根据考试主题干中的SQL脚本创建临时数据库,并为当前考生授权使用该临时数据库的权限,考试过程中学生在文本框中提交答案,页面中提示语法错误和执行结果。
算法1 SQL语句题阅卷输入:题目Id,提交SQL-S,答案 SQL-A输出:Score,Message 1:/*检查SQL注入*/2:Pattern ("\b(and|exec|insert|select|...)\b|(\*|;|\+|'|%)")3:if(Pattern.IsMath(SQL-S))4:Return Message warning 5:/*编译SQL获取语法错误*/6:SETPARSEONLY ON andexecS_SQLinDB 7:if(catch ex)8:Return Message ex.message 9:SETPARSEONLY OFF 10:/*执行SQL比较结果,取得Score*/11:execSQL-S and SQL-A in DB 12:return Score compare(RS,RA)
提交后阅卷功能对SQL语句正确性的判断有三个步骤,如算法1 SQL语句题阅卷算法所示,算法输入有三个题目Id、提交的SQL语句S_SQL和正确答案SQL语句SQL-A(SQL-Answer)。首先用正则表达式检查SQL-S(SQL-Student)语句语法的正确性。算法2-4行通过正则表达式匹配出SQL注入问题,再次算法6-8行,通过SQL-S提交到数据库执行获取语法错误,SET PARSEONLY为ON时只检查语法错误,不实际执行,获取到的异常信息在ex中,并在系统中提示。如无语法错误,则如算法11-12行所示,提交到数据库中执行SQL-S语句得到执行结果RS,执行SQL-A语句得到执行结果RA,并将其RS在RA中按照逐行检索的方式进行比对,如果结果一致则获得该题目所对应的分数Score,上述阅卷过程中比对没有完全一致,则该题目不得分。在比对过程中为保证阅卷结果的合理性,首先对两个执行结果中的表字段的集合进行比对,列的集合相等则继续比对行,最后对执行结果中元组进行排序并逐行比对,行的比对过程,将列排序后逐一展开。
3.2 关系代数
关系代数的学习和理解有助于学生理解和掌握关系数据库的理论基础,从而将实践内容和数据理论知识联系起来。数据库原理课程中的关系代数主要是 6 种关系运算,分别是并(∪)、交(∩)、差(-)、选择(σ)、投影(∏)和自然连接用表示,关系运算中还需要设计关系运算符、逻辑运算符、算数运算符和表达式界定符,所有符号结合起来形成关系表达式录入功能。
关系代数的考试功能设计分为题目和答案两部分,题目中上传待计算的关系和文字描述关系计算需求,正确答案按照图形界面设计的关系表达录入系统并存储,关系表达式中的条件表达式和投影用“[]”符号标记,操作界面中设计下标开始和结束标记。录入的答案将被转换为关系表达式语句,录入多条相同的参考答案,语句中选择转为select、投影转为project、连接转为join的关键字,并交差三种的规则相同,并将图形界面中显示具有下标二维关系表示转为用“[]”标记条件部分的一维表示方式,便于阅卷。
如式(1)所示的关系表达式,其中R、S为两个关系,R.Sid为R的外键,将其存储为一维的关系表达式为
用户界面中显示的表达式时通过JavaScript将关系运算关键字显示为对应的符号,并对“[]”标记部分显示对应的下标进行还原显示。
图1 关系表达式树
关系代数的考试过程和题目上传的功能相同。关系代数题目阅卷功能的设计中,首先将两个关系表达式转为转换为如图1所示的表达式树。关系表达式中每个关系运算符是一个非叶子节点,关系为叶子节点,非叶子节点中包含条件表达式。投影project的条件为属性的结合,不做任何转换,存储为集合。投影project和选择select为单目运算符号,运算对象一个关系或者一个关系运算,将运算对方放置在右子树中。非叶子节点中的条件表达式也转为表达式树,其中单目运算符的运算对象在右子树,条件表达式中的运算符按照优先级分级,优先级高的运算符放在运算符低的运算符的叶子节点中,先进行计算,条件中到的所有小于和不大于关系转为等级的大于和不小于关系,以方便比较,条件表达式存储在CE-T(ConditionalExpression Tree)中,分别是CE-ST和 CE-AT。
算法2 关系代数题阅卷输入:题目Id,提交RA-S,答案集合RA-A输出:Score 1:/*转为表达式树*/2:RA-ST transform(RA-S)3:RA-AT transform(RA-A)4:/*比较表达式树*/5:while (RA-ST and RA-AT and unvisited)6: s=RA-ST->rightchild->parent 7:a=find(s in RA-AT)8:if(compare(s,a)=true)9:compare(CE-ST,CE-AT)10:sets,a visited 11 s=s->parent 12:loop 13:if(RA-ST and RA-AT and visited)14:return Score 分数
关系代数阅卷如算法2所示,比较学生提交答案RA-S(RelationalAlgebra-Student)和正确答案集合RA-A (RelationalAlgebra-Answer)某一个生成表达树的一致性,采用自底向上的比较方法,从RAS第一个非叶子节点开始,在RA-A中查找相同的节点,并将两个非叶子节点的左右子树进行比较,相等则继续比较两个非叶子节点中的条件表达式树CEST和CE-AT,如果条件表达式也相等则标记该节点和叶子节点已访问,重复以上步骤,至两个树种所有节点都被访问过,则该题目获得题目分值,否则为0。在表达式条件表达式匹配过程中,如果非叶子节点中的上级运算符在相同优先级,则向上找到所有的相同优先级元素符,将其自己节点合并在同一集合中,答案CE-AT中也进行相同的操作进行比较。
3.3 最小函数依赖
函数依赖部分的知识分为候选键判断、关系规范化、最小函数依赖集和关系分解,其中候选键选择、范式考试是填空题,关系分解问题分解后为多个关系的集合,在阅卷中可以通过简单的答案相等性判断得到分数。最小函数依赖求解过程需要函数依赖的推理,关系R<U,F>中,U为属性的集合,F为属性依赖集合,其中属性依赖用“->”表示。题目的设计过程中单独存储原始待计算关系,以便于后期阅卷,题干中文字的要求每一小题作为一项,以便于分值的计算。最小函数依赖的正确答案不唯一,在设计题目时只给出参考答案,在阅卷过程中并比将学生给出最小依赖集与参考答案进行比较或分析的出分值。
最小依赖集答题过程中用户只需要提交最小依赖集结果,不需要中间的推理过程。答案的书写按照关系R中属性依赖关系F的格式,在提交答案是检查输入格式的合法性。阅卷过程如算法3所示,其中FD-S(Functional Dependency-Student)为学生提交的最小函数依赖。FD-Q(FunctionalDependency-Question)为题目中的原始关系函数依赖。
算法3 最小函数依赖题阅卷输入:题目Id,提交FD-S,原始关系函数依赖FD-Q输出:Score 1:/*对FD-S再求最小依赖*/2:if(FD-S 中左/右部长度>1 orFD-S 有重复项)3:return Score 0 4:R-FD Armstrong公理求FD-S的最小函数依赖5:if(R-FD !=FD_S)6:return Score 0 7:/*计算FD_S与FD-Q是否等价*/8:else if(FD-QFD-Q)9:return Score 分数
最小函数依赖题目的阅卷分为两个步骤,算法1-4行是对FD-S用Armstrong公理重新计算最小函数依赖,算法5-6行判断如果是最小函数依赖,则在7-9行再次计算FD-S和FD-Q中的F是否等价,计算FD-S是否能够和FD-Q相互覆盖。
3.4 E-R图
E-R图是从现实到机器之间沟通的主要工具,E-R图的在线绘制工具在网络中已有很多,但在考试系统中的应用还没有被广泛应用。E-R图在线考试功能分为绘图、图形转为XML文档提交答案、XML文档转为关系并阅卷三项主要功能。E-R图题目设计为两部分文字,其中题目要求为文字,和绘制答案E-R图。在绘图功能中选择较为成熟的JointJS,JointJS是一个基于SVG的图形化工具库,graph和paper定义画布,携带的元素element满足绘制E-R图的需求,并可以自定义元素,页面上的操作触发view的事件,通过回调函数获取model完成绘图功能,绘制好的E-R图需要存储和还原,在JointJS 中 提 供 了 EXPORT_URL、SAVE_URL、OPEN_URL属性,传入对应的URL即可传入后台,其中EXPORT_URL将绘制结果导出成图片,在显示中可方便缩放,修改时OPEN_URL加载XML文件并还原绘图,SAVE_URL属性指定存储URL,URL的接收方法中string类型的参数xml存储绘图结果文件,文件类型为XML。
E-R图的阅卷过程中,解析提交的和答案XML文件,将XML文件转换为内存对象的集合,并比较两个对象集中对应项目的数量,按照数量比例给定分值。
算法4 E-R图阅卷输入:题目Id,提交ER-S,答案ER-A输出:Score 1:/*解析ER-S和ER-A转为对象集*/2:ER-SE transformToEntities(ER-S)3:ER-AE transformToEntities(ER-A)4:/*查找ER-SE中实体名在ER-AE实体名的集合为EC*/5:EC=find(ER-SE实体名 in ER-AE实体名)8:return Score
E-R图的阅卷如算法4所示。输入题目Id,提交ER-S(E-R-Student),答案 ER-A(E-R-Answer),将其解析为内存对象的集合ER-SE和ER-AE。XML文档中对实体、属性、关系都以mxCell元素加Vertex属性,style属性区分三者,rounded为实体,ellipse为实体属性,rhombus为实体关系,边用mxCell元素的Edge属性区分。实体和属性的关联是实体属性中Source属性指定实体,实体之间的关系查找rhombus标记属性联系两个Edge,并将其关联元素中fontStyle=4(主属性)的元素组合成新的实体对象的属性。XML转换为实体的集合,每个实体转为“{实体名(属性 1,属性 2,…) Identity(属性 1,属性 2,…)}”的格式,属性之间“,”分隔,关键字之间空格分隔,实体之间的关联也作为一个实体,转换过程如算法1-3所示。算法5-8行计算分值,查找集合ER-SE对象中的每个实体名是否在ER-AE中存在,按照存在的比例减去分值,并将两个集合中存在的实体按照相同的方法计算属性,主属性比较对应实体中对应属性的IsIdentity标记,并按照比例减去分值,加上题目设定分值得到E-R图最终得分。
4 总结
文章研究并设计了数据库原理在线考试系统中SQL语句、关系代数、函数依赖、E-R图四种题型的在线考试功能,并将其应用到日常课程测试和期末考试中,研究设计功能加入在线考试系统中能够满足基本的考试需求。在SQL语句的设计过程中没有加入语义分析技术,如果学生提交的答案部分正确时,无法推断出按正确比例计算的成绩,关系代数功能的阅卷规则和分值判定方法不够精准,后期计划加入词法分析和语法分析,最小函数依赖求解问题只判断了结果过的正确性,没有检查推理过程。设计的四种题型在线考试功能,在阅卷环节分值判断的合理性还有待更多的实践应用的检验。在数据库原来课程中关系分解也是重要的学习和考核内容之一,在本文中暂未涉及,在未来的研究中将进一步研究它的在线考试功能设计。