国产化时代的数据库原理教学与实践改革
2023-01-02彭煜玮彭智勇
刘 斌,彭煜玮,余 琍,彭智勇
(武汉大学计算机学院,湖北武汉 430072)
0 引言
数据库原理是计算机专业的一门核心课程,数据库技术的快速发展,给该课程教学带来了许多新挑战[1]。例如,随着移动互联网的飞速发展,人们可以使用手机等移动设备快速完成各种交易,与之对应数据库中的各种记录规模都在百万级以上。而且,近几年来企业对数据的安全越来越重视,国产数据库替代国外数据库成为一个很重要的趋势[2]。数据库课程的教学与实践需要适应这些新需求:首先,数据库的实践环境要过渡到使用国产数据库;其次,由于用户数据库中包含大量记录,因此实践环境需要模拟这种场景,才能使学生更深入地理解数据库功能以及各种参数配置,使数据库应用程序的性能满足用户需求[3];最后,国产数据库研发需要大量专业人员,需要培养掌握数据库内核技术的高端人才[4]。近年来,武汉大学数据库课程组在教学与实践中作出与之相适应的改革,通过加深和拓宽原理性知识传授,设计多层次的数据库系统实践方案,培养了一批适应数据库产业发展的合格人才。
1 融合式教学
融合式教学,是指将数据库原理与数据库系统功能进行关联[5]。数据库原理重点介绍关系数据库相关知识,比较抽象。数据库软件给用户呈现的是各种丰富的功能,每一个功能背后都隐藏着数据库原理的核心知识,将两者在课堂教学中进行有机关联可以帮助学生更好地掌握相应的原理知识,使基础理论学习不空洞,实践环节有准备。
在数据库原理知识点与课程实践采用的国产数据库管理系统功能之间建立3 种关联:直接关联、内涵关联以及补充关联。
(1)直接关联。数据库课本内容在数据库管理系统(Database Management System,DBMS)中的直接体现,两者之间是一一对应关系[6]。比如结构化查询语言(Structured Query Language,SQL)的增删改查功能,课本中SQL 语法规则使用的是标准的SQL,商用的DBMS 都支持兼容。课堂中讲授SQL 语句时,学生可以直接在DBMS 中练习使用,这些知识点可以很平滑地进行过渡。
(2)内涵关联。分析课本知识点与DBMS 功能之间本质上的联系,以及DBMS 为什么要这样设置功能,设置的目的是什么。比如数据库原理中的事务内容,事务是数据库原理的重要组成部分,课堂首先讲授其具备的ACID 4个特性,其次讲授事务的并发执行会带来的3 种不一致性与解决不一致性的方法、事务的串行执行以及两端锁协议,最后讲授事务的显式定义begin transaction 语句、事务提交commit 语句以及回滚rollback 语句。这部分内容非常多,也比较难。
DBMS 功能体现在两个方面:一是提供事务的显式定义begin transaction 语句、事务提交commit 语句以及事务回滚rollback 语句,但是最重要的锁对用户是透明的;二是提供事务隔离级别的定义功能,对应语句为set transaction isolation level,并定义了4个隔离级别。数据库原理中讲授了不同的锁协议,每一种锁协议对应事务之间不同的隔离程度,从而清楚地阐述隔离级别和锁之间的内在关联。
在讲述这部分内容时有一个难点:DBMS 为什么把隔离级别功能留给用户?这样做的原因是:用户从实际需要出发,定义事务需要的最低隔离级别,以最大限度地提高DBMS 的事务吞吐能力。例如,对于一个应用系统来讲,T1、T2 两个事务可能理论上存在同时修改同一个数据的情况,因此需要高级别的隔离程度,如read repeatable。但是真实应用中可能T1、T2 按顺序执行,根本不可能并发执行,所以可以把这两个事务并发执行的隔离级别设置成read committed,从而最大限度地提高事务并发执行程度。经过以上分析,即能把原理、功能以及目的之间的关系讲解清楚。
(3)补充关联。主要是针对数据库课本中相对比较宏观、不够具体以及DBMS 功能相对复杂的一些内容[7],可以利用DBMS 的功能细化知识点,使其更加丰富、具体。例如数据库的物理设计,通常课本都是简单几行,但是DBMS有好几个对应的功能点,比如表空间、块使用百分比(PCTUSED)等。表空间是一个很抽象的概念,不好理解。数据库中的数据最终都存储在文件中,用户可以设置多个文件。为了管理方便,建立了表空间的概念,多个逻辑上有关联的文件可以划分到一个表空间中,所以一个表空间包含多个数据文件,一个数据文件只能属于一个表空间。经过以上分析,再进一步介绍表空间各种参数设置以及相应含义。最后可以结合数据访问的速度要求,将数据存储在固态硬盘、机械硬盘中。通过逐步深入,讲解物理设计中数据的存储位置、大小、磁盘性能等相关内容,使物理设计更加具体。
2 专业特色教学方案
武汉大学计算机学院共有计算机科学与技术、软件工程、人工智能3 个专业。本科班分为计算机科学与技术班、计算机科学与技术卓工班、软件工程班、软件工程卓工班、弘毅班。针对不同班级,在课堂讲授时有针对性地选择难度不同的案例。
在计算机科学与技术班和计算机科学与技术卓工班的ER 图授课中,经典的案例就是大学数据库,包含学生、课程、教师实体,存在选课、授课联系。该案例对学生来说比较易懂,但是也存在明显缺点,就是太简单。为此,根据武汉大学校运会有学生、教师共同参加的特点,选择了大学运动会案例。案例的ER 图如图1 所示,组别的含义是学生参加学生组项目,教师参加青年组、中年组项目,转换成关系模型后,数据模式包含了10 个关系,有一定的复杂程度,图1中省去了部分属性。
Fig.1 ER diagram of university sports meeting图1 大学运动会ER图
表1 展示了ER 图知识点和运动会ER 图之间的对应关系。通过该案例向学生形象说明了“两个实体之间可以参与多种联系”这个比较难理解的知识点。
Table 1 ER knowledge points and corresponding examples表1 ER图知识点以及对应实例
因为该案例贴近学生生活,经过分析研讨,90%的学生都可以顺利地画出ER 图,并且可以得到正确的关系模型。在此基础上进一步联系实际,向学生指出:参与关系Attend(WNO,PrjNO,Group,Seq)对应比赛用的秩序册,此时,不少学生才恍然大悟,明白了数据库中的表、关系等在实际中的具体对应内容,切实体会到了课程理论知识的现实意义。
软件工程专业学生在软件开发能力上比其他专业的学生更强,因此课程教学对该专业学生的要求也更高。在软件工程专业的数据库课程教学中,除基本的数据库增删改查功能外,重点针对触发器和存储过程开展教学。最后结合高级程序设计语言,让学生能够实现批插入的功能。
软件工程卓工班则结合事务和触发器,让学生掌握事务的不同隔离级别、事务执行过程中触发器的作用以及破坏触发器的约束条件导致的事务回滚等问题。
总之,数据库系统课程教学针对不同专业特点,要求学生对国产DBMS 某一个方面的功能有深入了解,学习并掌握该功能更深更难的应用,达到深入用好国产数据库软件的目的,培养学生的钻研精神以及自主学习能力[8]。
3 多渠道挖掘教学案例
SQL 语言是数据库原理中一个重要的教学内容,也是学生感到比较困难的一个章节。学好SQL 语言是用好数据库的基本要求,如果将来从事数据库相关领域的工作,对SQL 编程也有较高要求。现在的毕业招聘考试一般都会涉及到SQL 语句编程,题目相对复杂,SQL 语句复杂意味着业务逻辑复杂,从业务逻辑到SQL 脚本是一个转换过程。学生学会复杂的SQL 编程意味着其具备较强的转换能力。转换能力培养不是一蹴而就的,需要反复地训练、体会,这就需要在课堂教学环节中进行训练和一定的课后练习。
“学生选课数据库”案例相对来说比较简单,因此也很难提出比较复杂的问题。由于课堂时间有限,在有限的时间内介绍一个复杂且学生不熟悉的业务背景,要求学生理解需求并进行SQL 编程训练,效果不一定很好。因此,需要从其他途径挖掘合适的案例,改造成适合于课堂教学的形式[9]。
QQ 是学生们经常使用的社交工具,里面许多功能都可以作为课程案例,可以引导学生思考这些功能用SQL 语句怎么实现。比如QQ 的好友推荐功能,你和谁有几个共同好友,但你们还不是好友。给出这样的查询:列出有4个共同好友但自身不是好友的用户对,每个用户对只出现一次。QQ 的好友信息可以用用户表User 和好友表Friend表示,其中uid1 和uid2 都是外键,参照User 表中的uid 取值:User(uid,Name);Friend(uid1,uid2)。
虽然表结构比较简单,问题也看似简单,但是答案还是稍显复杂。SQL 语句如下:
其他课程中也可以发现许多例子。针对人工智能专业学生的特点,选用关系存储稀疏矩阵的案例。对于两个不同矩阵matrix1(row,col,val)和matrix2(row,col,val),要求采用SQL 语句实现两个稀疏矩阵的相乘,对应的SQL 语句如下:
该案例包含SELECT 语句的6 个子句,通过该SQL 语句,可以完整地说明6个子句的先后执行顺序。
数据库课程组经常展开教学研讨,每位老师根据自己课程内容交流学生感兴趣的问题。针对这些问题,各自提出合适的案例,然后将所有案例进行概括、整理,形成更多可用于教学的案例。
4 多层次课程实践
数据库课程实践是数据库教学的一个重要环节[9]。在实践环节,首先要和其他课程做好相互衔接。比如在面向对象的程序设计语言课程中,老师很有可能布置利用JDBC 编写Java 程序访问数据库的任务,因此在数据库实践中删除这部分内容。在数据库实践环节主要侧重于以下几方面内容:
(1)国产数据库部署。在数据库选型上,讲授几种开源国产数据库,例如PolarDB、OpenGauss、Oceanbase 等,提前让学生选择。这样做的原因是国产数据库适配的操作系统不是Windows,需要学生花时间学习与操作系统安装相关的基础知识。
(2)与国产数据库厂商加强联系,邀请工程师进课堂。在授课环节,邀请华为数据库团队的专家走进课堂,讲授高斯数据库的功能与特色,对国产数据库起到了很好的宣传推广作用,避免了数据库实践环境言必称MySQL 的局面。
(3)针对性地制定实践内容。在软件工程卓工班,侧重于SQL 语句编程、触发器以及事务实践内容。在事务实践中,提供脚本模拟两个事务交叉执行,在不同的隔离级别下观察事务执行结果,再反推在此情况下数据库加锁和释放锁的过程,从而让学生更好地掌握各种封锁协议。对于能力突出的学生,鼓励其编写模拟程序,一次性向数据库中插入百万条记录,体会索引在连接查询中的作用。最后使用SSD 和机械硬盘存储数据,让学生观察对于同一个SQL 查询语句,磁盘性能对查询性能的影响。
(4)针对弘毅班的学生,开展迷你数据库(miniDB)研制的课程实践。弘毅班是教育部“基础学科拔尖人才试验计划”在武汉大学的具体实施,培养有志于国产数据库研究与开发的专业人才。弘毅班的课堂教学内容与其他班级不一样,增加了数据库系统实现部分的讲解,并且第二学期有专门的数据库系统实践课程。在实践中,每个小组5 名学生,分别负责存储、编译、执行、索引和事务。任务基本完成情况如表2,结果表明开发一个演示版的数据库是可行的,相信经过一两年完善,每一个小组均能完成该任务。
Table 2 Analysis and strategy of the results of database system development practice表2 数据库系统开发实践完成结果分析与对策
5 教学环节中的思政元素
思政教学,落实在大处,即引导学生增强爱国主义观点[10]。而从小处看,则是要培养学生做一个健康、热爱生活的人。在数据库教学、实践以及考试环节中,有针对性地、恰到好处地引入思政元素[11]。
例如在数据库引言教学中,加入国产数据库近年来的发展历史以及在各个行业的显著应用。在课堂重点分析天猫双十一每秒支持58.3 万笔交易背后的技术,以及对生活带来的各种影响,让学生明白国产数据库不仅可实现国外先进数据库的功能,甚至可以做得更好;同时介绍阳振坤老师用10 年时间搭建Oceanbase 数据库的故事,激励年轻有为的大学生们投身到国产数据库研发中。
数据库主要用于管理数据,在考试环节把国家发生的大事,同时也是学生感兴趣的话题用数据库形式表现出来。比如前几年我国海军的万吨驱逐舰服役,在学生们中反响巨大。构建军舰、级别、演习、士兵之间的ER 图作为考题,考试结束时,学生们纷纷和老师讨论该题目有哪些地方可以改进。对该题的得分进行统计,90%以上的学生均能拿到满分。另外,将核酸检测场景引入考试中,在学生解决问题的同时,也提醒其时时刻刻要遵循防疫规定。
6 教学与实践效果
学期结束后,通过调查问卷的形式,针对教学、实践和考试环节让学生进行评价,结果如表3 所示。通过调查问卷可以发现,学生们对数据库的课程改革基本比较满意,相关知识点均掌握较好。
Table 3 Questionnaire of teaching and practice reform表3 教学与实践效果调查问卷
通过融合式教学,80%以上的学生都能掌握事务隔离级别的设置,并能很好地理解掌握表空间的概念。在实践环节利用表空间概念建立数据库的步骤中,78%的学生都能建立表空间,再建立数据库相应的表,而不是利用缺省的参数直接建表,从而加深了对物理设计的理解;10%的学生经过提醒后,能正确地理解表空间概念;10%左右的学生还是不太理解表空间的概念,经过打比方和目录等概念的比较说明,在其他学生的帮助下才基本能够理解。根据学生的专业特色设置不同教学方案,结果表明,85%以上的学生能较好地完成相应任务,其余15%的学生在参考了比较好的学生作业后,可以理解并进行修改,从而基本完成作业,表明其确实在程序编写方面存在欠缺,利用计算机程序思维解决问题的能力需要提高,需要其他课程(例如高级程序设计)配合,通过多练习才能提升相关能力。在SQL 语句编写课堂教学中,所有学生均能够理解业务场景,15%左右的学生除缺少一个条件外,其余均能正确书写。在课后作业中,80%的学生能编写正确的SQL 语句。在以后的教学与实践中,通过及时发现学习能力稍弱的学生,开展有针对性的帮助,可以进一步提高教学质量。
7 结语
国产数据库已经应用于各行各业,数据库技术也随着其他软硬件发展和用户需求的变化而快速发展。数据库教学与实践必须时刻关注、适应这种变化,才能使数据库原理课程教学与实践与时俱进,培养出的学生才能紧跟数据库发展的潮流。