李德胜
(安徽科技学院 信息与网络工程学院,安徽 凤阳 233100)
MySQL数据库课程教学难点教学分析
——以数据库设计为例
李德胜
(安徽科技学院 信息与网络工程学院,安徽 凤阳 233100)
近年来,由于MySQL的体积小、功能全和免费的特点,加上PHP+MySQL的Web开发架构的兴起,MySQL已经成为了计算机、软件工程等专业中承接“数据库系统原理”和“PHP Web开发”的重要专业课程之一。然而,作为一门新兴的专业课程,其课程、教材、资源、教学研究都还不够充分。尤其是课程中学生容易混淆的一些教学难点,不仅使学生感到严重的挫败感,而且影响了后续数据库的进一步应用。本文结合Web开发应用,对MySQL中的一些教学难点进行分析,并提出一些教学实践改革方法,拟形成一些最佳实践的教学方法。
存储引擎;环境配置;范式;数据库设计;字符集;校对规则
MySQL是一款优秀的DBMS软件,是目前事实上的小型关系型数据库范例之一。与其他关系型数据库(Oracle、DB2、SQLServer、SQLite等)相比,它具有体积小、功能全、查询快捷、完全免费等特点,加上目前广泛流行的PHP+SQL Web开发架构,使得MySQL数据库课程[1]逐渐走向了计算机科学与技术、网络工程等专业的课堂,成为了承接“数据库系统原理”[2]和“PHP Web开发”[3]的重要专业课程。
然而,作为一门新兴的专业课程,其课程、教材、资源、教学研究都还不够充分,尤其是课程中学生容易混淆的一些难点,不仅使学生感到严重的挫败感,而且影响了后续数据库的进一步应用和后续Web开发课程的教学。
下面就MySQL数据库课程教学难点展开分析,并提出相关对策。
MySQL的配置相对于其他工具来说并不算特别复杂,但是对于刚刚接触它的同学来说,也是一个比较繁琐的事情,而且容易导致数据库服务启动失败。它的配置涉及到安装版和复制版,普通版和服务器版等不同版本,其主要配置文件是mysql.ini(Linux系统下是mysql.cnf),分为两块:客户端区配置和服务器区配置。当mysql服务器启动时会读取该文件来设置相关的运行参数。
在PHP+MySQL的Web开发体系架构中,MySQL对于性能的影响所占比例最大。MySQL的设置是否合理正确和最优化,直接影响到Web应用的运行状态、速度和吞吐量。另一方面,MySQL也是优化难度最大的一个部分,不仅需要深入理解MySQL的原理,同时一定的经验判断,才能够设置好合理的参数。
在实际的教学过程中,对于初次接触MySQL的学生来说,这部分内容不仅失败率高,影响学生的自信心,而且会拖延教学实践的进度。因此,我们在实际的教学过程中采用了PhpStudy集成环境,它很好地集成了MySQL、PHP、Apache、IIS、Nginx,是真正的一站式开发环境。其中,关于MySQL,不仅包括了强大的客户端工具,基于桌面的MySQL-Front与基于Web的phpMyAdmin,而且提供了MySQL配置工具(如图1所示),可以轻松设置密码、执行MySQL命令、备份还原数据库和设置参数值。
图1 PhpStudy集成环境中的MySQL工具
MySQL的优点之一就在于可以根据需要选择多种存储引擎,它支持MyISAM、InnoDB、HEAP、BOB、ARCHIVE、CSV等多种存储引擎。其中在Web 应用开发中最常用的就是MyISAM和InnoDB两种引擎。MyISAM引擎下的数据表的优点是存取速度快、技术成熟、稳定和方便管理,缺点是而容易造成碎片,事务支持差。而InnoDB的优点是功能丰富、事务支持好、安全性高,缺点是读写速度稍慢、空间占用大。
基于这些特点,对于大多数学生来讲,该如何选择这两种引擎,成为了教学中的一个难点。在实际教学中,应该让学生掌握选择的原则和参考标准。具体选择的原则可以从范式约束、时空、事务和锁、并发性、安全性和可移植性等方面考虑。一般来说,从可以方便移植、节约空间和时间的方式来讲,并且不涉及多表的外键操作或事务处理,就应该选择MyISAM类型。例如,在线文档、网址收藏等Web应用,就比较适合MyISAM类型;反之,如果需要使用事务,或者需要更高的安全性,或者允许多用户并发操作表的数据,就应该首选InnoDB类型。例如,转账付款、在线购物、在线抓取等Web应用,就比较适合InnoDB类型。特别是在多用户操作数据表的时候,InnoDB采用的是数据行锁定方式,而非MyISAM采用的数据表锁定方式。因此,在事务处理中,只要不是正在被事务处理的数据行,其他用户仍然可以访问数据表。然而,InnoDB在表空间管理、全文索引、商业许可等方面都有明显的劣势。除此之外,大多数虚拟主机、云主机提供商只允许使用MyISAM类型模式,因此也成为了Web应用中选择表存储类型和可移植性的一个重要因素。
因此,虽然InnoDB是MyISAM引擎的更新换代产品,但是在大多数情况下,还是应该首选MyISAM类型。当然,也应该让学生了解,两种引擎在一定条件下也能共存,即MyISAM数据表和InnoDB数据表存在同一数据库中。这样数据库设计者可以根据每个表的具体内容和用途来分别选择数据表的类型。
最后,需要告知学生的是,具体的运行速度收到系统硬软件配置(尤其是内存容量)、配置文件和应用程序代码等影响,不能简单判定哪种引擎更快,需要进行测试和模拟后再做出选择。
虽然在学习MySQL数据库课程前,学生已经先修了“数据库系统原理”的课程,但往往是事先已经设计好数据库,再进行操作,或者对于实际的数据库设计缺乏经验。因此,对于实际应用中的数据库结构(也称为数据库模式scheme)尤其不能随意为之。
数据库设计首先面临的问题就是范式的选择,即规范化normalization的过程,它可以小心地消除冗余以及解决数据库完整性的问题。规范化是由IBM研究员EF Codd博士提出并创建的一系列范式规则。满足这些范式的数据库不会发生插入、删除和更新操作异常。对于大多数数据库设计来说,1NF、2NF、3NF、BCNF这几种范式已经能够满足要求。
然而,虽然范式理念十分强大,但实际的数据库(尤其是Web应用中)设计中,需要考虑更多的因素,例如速度、冗余或不一致、程序难易等。有的时候,将数据结构优化为最高存储效率却在操作编程上是不可取的。因此,范式在某种意义上更像是一种指导性意见,而不是根本原则。在实际的设计中,有时需要在范式和实际效率之前取得某种平衡。
在指导学生进行规范化设计时,应该让学生充分进行需求分析和总体设计,找出需要访问的具体信息和之间的逻辑关系。并提倡学生用笔和纸进行设计,开始时尽量不要使用工具软件进行分析。甚至在笔者教学实践中,实体-关系图也有时会干扰学生的建模。因此,比较好的方式是最开始使用自然语言描述,再用集合映射图表示对应关系,这样做更加简洁明了和容易排错。
为了使学生掌握实际的表设计原则和方法,下面用一个具体的教学案例进行讲解和分析。
课堂上,可以用一个BBS教学互动平台的案例对学生进行教学,因为学生对这样的应用比较熟悉,这样学生容易产生代入感,有利于加深他们对内容的理解。
首先,将所有信息放在一个表中,进行预先评估。数据存放在数据库的一个表中:
userID, username, email, qq, tel, addr, jobID, jobtitle, jobcontent, replyID, replytitle, replycontent
根据定义,数据库表符合第一范式,但是不满足其他范式。因此,可以将数据库表进一步分解为范化形式:
(1)userinfo:userID, username, email, qq, tel, addr.
(2)jobinfo:jobID, jobtitle, jobcontent.
(3)replyinfo:replyID, replytitle, replycontent.
(4)userjobinfo:userID, jobID.
(5)jobreplyinfo:jobID, replyID.
可以证明该设计是满足第1、2、3、BCNF范式要求的。但是,在实际的Web工程中,却存在冗余大、涉及表数量多、编程复杂的缺点。因此,还需要重新设计和化简。
图2 userinfo, userjobinfo, jobinfo对应关系集合映射与合并操作
观察数据库结构,发现在数据库表中存在一对多关系这种较特殊的情况下,如图2所示,userinfo和userjobinfo之间是一对多的关系,而userjobinfo和jobinfo是一一对应的关系。对于这种情况,我们可以进行数据表的合并而忽略第二范式原则的要求。因此,可以将一一对应的两个表userjobinfo和jobinfo合并为新的表newjobinfo。同理,也可以将jobreplyinfo和replyinfo合并为新的表newreplyinfo。这样可以一定量地减少数据冗余和简化表的操作,新的设计为:
(1) userinfo:userID, username, email, qq, tel, addr
(2) newjobinfo:userID,jobID,jobtitle, jobcontent
(3) newreplyinfo:jobID,replyID, replytitle, replycontent
该方法并没有使用实体-关系图,而是使用数学中的集合映射来对学生进行讲解,会使学生了解到,数据库理论的核心——关系代数实质就是集合论。这种教学方法的另一个好处是,通过这个例子说明数据库的结构设计不是一成不变的,有的时候也可以进行动态演化,即开始设计为三大范式,而后面再进行合并操作简化表结构。
在给学生讲解这部分内容时,一些相近的概念很容易混淆。所以首先必须彻底讲解和分清字符集、编码和校对的概念。
理论上讲,字符集是语言所使用的符号;而编码是将字符集从整数映射到字节的方法;校对规则是定义了比较字符串的方式。因此,这三个概念应该是严格区分的,但是由于学生对该知识点的空白,加上很多互联网资源都使用字符集来表示代码,可以当作同义词使用。这些都会给学生造成混淆。
对于如何选择字符集和校对规则,也需要对学生讲解清楚。
首先,选择目标字符集的时候,一定要选择源字符集的超级,例如,选择GBK 字符集而不是GB2312 字符集。GBK编码是定长编码,双字节编码,支持的系统多;而UTF-8编码不是定长编码,长度也在1 至4 字节,但却是互联网广泛支持的Unicode 字符集。基于这些特点,MySQL Server 也使用UTF-8作为内部本土编码方式。实际Web开发中的最佳实现是在GBK和UTF-8中选择一种适合自己网站特点的字符集。
然后,对于MySQL 中的字符集和校对规则,学生对于各种级别的设置往往会迷惑,这就需要教师不仅仅讲授如何设置它们,更要讲授这些设置发挥作用的时机和影响。另外,除了数据保存的字符集和校对规则,还存在客户端和服务器之间交互的字符集和校对规则的设置。一般要求这连接级涉及的所有的字符集都完全一致,才可以确保用户写入的数据可以正确地读出,尤其是对于中文字符。最后要对学生说明,这些设置都可以通过命令SET NAMES和修改mysql.ini文件两种方法来灵活设置。
最后,对于这部分的内容,最好举反例来说明,错误的设置方法将会是应用中出现乱码和丢失数据的根源。而当实际的Web应用中出现乱码时候,除了检查HTTP和HTML协议文本中的相关头部外,还应该对MySQL中的字符集和校对规则设置进行排查。
本文以MySQL应用中的数据库设计阶段为出发点,结合实际的Web应用对数据库的要求,对MySQL教学中的若干教学难点进行了梳理,并形成了指导学生最佳实践的教学内容和教学方法,以期消除学生的疑惑和不确定性,进一步提升学生的成就感和学习乐趣,并在实际的教学中收到了良好的效果。
[1] 王晶晶.mysql数据库基础教程[M].长春:吉林大学出版社,2015: 6-10.
[2] 李建中,王珊.数据库系统原理[M].北京:电子工业出版社,2008: 17-20.
[3] 刘乃琦,李忠.PHP和MySQL Web应用开发[M].北京:人民邮电出版社,2015: 35-38.
责任编辑:刘 琳
AnalysisofTeachingDifficultiesinMySQLDatabaseCourse—TakingDatabaseDesignasanExample
LI Desheng
(College of Information and Network Engineering, Anhui Science and Technology University, Fengyang 233100, China)
In recent years, with the rising of Web development framework of PHP + MySQL, MySQL with the features of small size, complete function and free of charge has become one of the important professional courses linking toDatabaseSystemPrincipleandPHPWebDevelopmentcourses in computer and software engineering majors. However, as a new professional course, its curriculum, materials, resources and teaching research are not enough. Especially, some of the teaching difficulties in the course not only make students confused, but also affects the further application of the subsequent database. This paper, combined with the development and application of Web, analyzes some difficulties in MySQL teaching, and puts forward some teaching practice reform methods, hoping to form best practice teaching methods.
storage engine; environment configuration; paradigm; database design; character set; proofreading rules
2017-01-16
安徽省重大教学改革研究项目(2015zdjy121)
李德胜(1979-),男,湖北宜昌人,副教授,博士,主要从事信息与网络工程方面研究。
G642
A
1009-3907(2017)10-0113-04