何小卫,叶荣华
(浙江师范大学 数学与计算机科学学院,浙江 金华 321004)
数据库课程教学是大学本科甚至研究生阶段计算机应用技术的一个重要环节,扎实掌握数据库相关技术是计算机科学、软件工程等专业毕业生的必备技能。现行的数据库原理及应用教材内容比较偏重于对数据库原理的理论性说明[1],而对数据库的实践环节叙述大多数相对简单,造成学生在学习过程中更多地学习理论知识本身,却忽视了这些理论知识的实际应用。事实上,本科的数据库课程是后续web应用开发、软件工程等课程的先修课程[2],是软件工程方向的基础课程,特别需要学生扎实掌握数据库的实践技能[3]。根据多年来这门课程的教学经历,我们认为课程教学方法上存在以下一些问题。
(1)实验课程学时安排偏少,内容简单。大多数本科阶段使用的数据库教材在内容的安排上,比较注重理论知识的完整性,一般都具有数据库概述、关系数据库、SQL语言、事务、并发控制、数据库恢复技术、关系数据理论、数据概念模型(ER、EER)、关系数据模型、关系数据库设计方法等相关章节,其中大部分内容偏向理论叙述,实践内容的安排普遍偏少且简单,在要求学生熟悉实验平台基本操作基础上,SQL语言的应用要求比较低,即使学生完成了实验内容,离实际应用的要求还是相差甚远。
(2)教学实施过程中教学内容的选择完全以选定的教材内容作为依据。在实施本科阶段数据库课程的教学中,通常会以选定一本教材作为组织教学的依据;而事实上,很少有教材能够满足理论与实践合理搭配的需求,特别是不能满足实践上的教学需求,往往除了基本的SQL实验以外,很少安排存储过程、触发器、游标等内容的设计;更缺少嵌入高级语言中的使用、基于web的数据库应用、DBMS的高级应用、DBMS高级主题等实验的安排。
(3)缺乏把理论与实践环节有机结合的教学机制。数据库课程的基本概念很多,实际上死记硬背这些基本概念是没有用的,必须在实践中让学生体会到这些概念的作用才能彻底理解,需要设计合适的实验用以体现基本概念、原理的作用,比如主键、外键、check约束、View、Null、Unique、索引、ER model、存储过程、触发器、游标、事务、并发控制、数据备份与恢复、主从复制等,这些基本概念如何在实验中得以体现,在教学过程中需要去设计相关实验,使学生在实践过程中就能很好地理解它们。
(4)缺乏有效的、动态的实验考核方法。当前数据库课程的实验除了内容简单、离实用相差大以外,对于实验的考核主要是查看学生提交的实验报告。事实上,学生提交的实验报告基本上是针对老师安排内容的实验过程和结果,而老师安排的实验内容相对固定,所以学生所做实验的过程与结果雷同,但是具体做的过程中,不同学生解决这些问题的速度、能力的考核很难从实验报告上精确地体现出来,所以非常需要有一种有效的动态考核方法。
(5)缺少培养学生不断深入学习的内容引导。当前本科阶段数据库课程的课时安排通常为每周4课时或3课时,而其中实验课时通常最多占三分之一,光靠本科阶段的这些课时显然不能满足学生工作前的学习课时要求,而教学过程中往往仅介绍关系数据库技术。随着数据库技术的不断发展,非关系数据库系统如MongoDB、HadoopDB等[4-6]以及BlockChain系统(如以太坊、Hyperledger Fabric),均为当前新的数据管理技术框架,需要教师根据实际情况制订数据库课程系列的整体学习框架,至少能够花少量的课时介绍这些最新的技术,能满足学生学完本科阶段课程以后2~3年后续学习内容的推荐,或者研究生阶段的课程内容学习。
数据管理技术当前处于一个多种技术共存的时期,见图1,关系数据库仍然是主导的数据库技术,Nosql数据库和去中心化的数据管理技术的发展也非常迅猛,所以作为担任数据库相关课程的任课老师,在教学内容和教学形式上也需要与时俱进,不断调整数据库课程的教学内容特别是实验内容,使学生毕业以后能够适合社会在这方面的技能需求。根据近年来笔者从事本科、研究生阶段数据库课程的教学实践,课程分为基础实验、递进实验、高级主题实验3个实验模块,其中前两个模块为本科阶段安排的内容,而高级主题实验为学生进一步学习的内容。通过前两个模块的学习和实践,学生能够深刻理解数据库课程中的基本概念与原理,从而牢固掌握它们;数据库技术高级主题包括SQL语句防注入技术、查询优化技术、高性能索引技术、读写分离技术、分区分表技术、主从复制技术等,学生在工作之前掌握这些内容,无疑会给就业的岗位层次带来显著的提升。
图1 数据管理技术现状
当前关系数据库仍然是主流的,涉及的知识点有数据库安全性、数据库基本概念(数据、数据库DB、DBMS、DBS、模式结构)、关系结构(关系、元组、属性、超键、键、数据类型)、键(候选键、主键、外键)、数据完整性约束(实体完整性、参照完整性、用户定义完整性,包括数据类型定义、null、Check约束、Unique约束等)、基 础 SQL 语 言(Select、 Insert、Update、Delete、Create Table、Alter Table、Drop Table)、数据库安全性管理(用户管理、授权管理、角色管理)、数据库特殊机制(存储过程、触发器、游标)、事务、并发控制、数据库恢复、关系数据理论(函数依赖、范式理论、关系分解)、ER设计与数据库设计等[5]。图2是关系数据库的主要知识点及相互关系图,除了关系数据理论、ER模型设计以外,其他概念与内容均可以直接安排进实验。比如,对于关系结构(关系、元组、属性、超键、键、数据类型)、键(候选键、主键、外键)、数据完整性约束(实体完整性、参照完整性、用户定义完整性(包括数据类型定义、null、Check约束、Unique约束等)这部分内容可以通过设计2~3个带各种约束的Table创建来覆盖所有涉及的知识点,并设计其他的操作来验证约束的有效性;对于SQL语言的查询语句需要设计各个类型的问题,涉及select语句的各种条件的使用和group by、order by子句的使用; 对于事务、并发控制等内容可以设计模拟多用户情形,结合封锁机制来实现并发控制的效果;而对于数据库安全性,可以设计一具体的应用场景,让学生根据不同用户使用某一数据库的场景,要求学生使用用户管理、授权、角色等相关操作设计安全性的解决方案。综上所述,设计若干基础性和综合性实验来覆盖关系数据库中所涉及的重要概念,通过完成这些实验,不但让学生能够熟练掌握实验技能,而且使学生对于重要概念有深刻的理解,与去背诵这些概念所达到的学习效果是完全不同的;对于实验考核,考虑安排新的题库随机考核学生的掌握情况。
完成基础性实验之后,在基于高级语言的纯代码数据库访问、基于Web的数据库应用设计两个方面,需要设计相关的综合性实验。考虑到本科阶段后续会开设Web应用相关的课程,必然会学习如何在Web页面访问关系数据库数据,所以这部分内容在课时紧张的情况下可以让学生在Web应用课程的时候再去学习,当然可以鼓励学生课后去尝试如何在Web应用中使用数据库技术,要求学生根据某个具体应用场景,完成基于某个角色的一组功能,比如在成绩管理系统中的教师成绩录入、修改、查询统计页面功能,包括动态页面设计、JS代码、数据库访问等,但不限于用什么开发平台、语言和使用的框架。
基于高级语言的纯代码(比如Java)的综合实验,要求学生能够完成基于高级语言的纯代码方式连接、访问关系数据库,如果完全由学生去完成所有的代码可能有一定的困难,所以在设计这个综合性实验的时候可以尝试给出简单的代码框架和简单demo,可以使学生根据不同的实验需求快速模仿数据库访问的相关代码。
在本科阶段能够完成以上两个部分实验,应该会得到不错的教学效果,但是仅仅如此对于即将走向社会从事计算机软件研发相关工作的学生来说还是不够的,还缺乏对数据库领域一些高级主题的应用,比如SQL语句防注入技术、查询优化技术、读写分离技术、分区分表技术、主从复制技术等,而这些内容对于未来从事数据库管理员和研发的学生尤为重要,事实上也成为市场上数据库方面高端人才层次中最重要的要求,能够熟练掌握这些数据库高级技术的人才也成为市场上的香饽饽,薪资水平会在普通数据库人才的基础上有一个非常明显的提升,甚至几倍的水平。
虽然在本科阶段的数据库课程中一般不会要求学生进行这些高级主题的技能训练,但由于这部分内容在高层次数据库人才角色中的重要性,所以对于本科阶段的优秀学生或者研究生阶段的学生需要引导他们去熟悉这些高级数据库技术,针对不同的主题设计合适的综合性实验或者课程设计,通过这些实验的训练,学生能够深刻理解这些主题相关技术的目的、措施、效果,把这部分优秀的学生训练为具有高级数据库技能的潜在专家。
虽然当前最流行的数据管理技术还是关系数据库,但是Oracle、Sql server、Mysql这些商用产品无一例外都是中心化的数据管理模式,数据类型比较传统,比如数值、字符串、日期时间等;随着互联网环境下数据类型的多样性和数据分析任务的需要增长,关系数据库的关键特性包括完善的事务机制和高效的查询机制这两个引以为傲的关键特性,到了Web2.0时代却成了鸡肋,因为Web2.0网站系统通常不要求严格的数据库事务、不要求严格的读写实时性、不包含大量复杂的SQL查询,可以考虑选用NoSQL数据库,比如Redis、HadoopDB、MongoDB等。关系数据库和NoSQL数据库各有优缺点,彼此无法完全取代。电信、银行等领域的关键业务系统,需要保证强事务一致性,仍然需要使用关系数据库;而互联网企业、传统企业的非关键业务(比如数据分析)可以使用NoSQL数据库。最新的NoSQL数据库,也是大数据方向的工具,引导学生后续学习或者开设相关的课程,对于学生以后走向工作岗位也是非常有好处的。去中心化的数据管理技术(如区块链技术)也是近两年发展非常迅速的方向,涌现出了以太坊、Hyperleder Fabric等著名系统,值得我们及时关注和研究,有可能的话也可用其设计入门级的实验。
目前主流的关系数据库分为基础性实验、递进实验、高级数据库主题实验,其中本科阶段学生必须完成基础性实验并至少选做递进实验中的一部分;还可以设计相关的高级主题实验引导学生后续学习或者在研究生阶段的学习,包括在NoSQL数据库上和区块链上的实验安排。