杨金民,肖 晟
(湖南大学 信息科学与工程学院,湖南 长沙 410082)
在数据库课程教学中,总会出现一些学生在某段时间既没听课,也没看课件和做作业的情况。由于课程知识抽象难懂,又有连贯性,这种中间缺失容易导致他们在随后的学习中上课听不懂、书本看不懂、学习跟不上,出现学习掉队的现象[1]。对此,除了学生要时刻警醒、合理安排时间外,教师也应该把课程知识梳理得更加简洁,通俗易懂,使学生看课件就能弥补课程缺失,跟上学习进度。此外,当学生对所学知识感受不深、领悟不透彻时,就很难在随后的工作中自觉任用,直接后果是他们设计开发的系统存在很多隐患,企业和用户都深受其害[2]。为缓解该问题,课程知识的简洁通俗化梳理很关键,但这项工作并不容易,原因是课本知识在内容组织和表述上通常做了形式化处理,以求知识在数理上具有严密性和整体性,达到理论体系的高度。对于大学生来说,他们是初学者,很难真正读懂书本,抓住问题的实质[3]。授课教师不但学习过相关课程知识,而且拥有长期的科研与实践经历,对现实中的问题以及知识的来龙去脉已有深刻透彻的感悟,也就能够抓住关键、揭示本质、理清关系[4]。因此,对于学习难度大的课程,如数据库原理与应用,教师对课程知识的简洁通俗化梳理,对改进教学效果非常重要。
课程教学的一种通用模式是先吃透理论知识,再谈理论知识的应用,如物理、化学等课程的教学模式。计算机学科与物理学科、化学学科相比,有一个明显的不同点:物理知识和化学知识来自于对自然规律的发现和总结;计算机学科尤其是软件学科,概念都是人为提出的,理论知识都是从工程实际问题的求解优化过程中总结而来,再加以形式化处理,泛化为抽象的概念和法则,目的是延伸其适应范畴。因此,计算机学科教材中的理论知识,通常并不容易领会和看懂,尤其是对于初学者。原因是初学者还没有接触过相应的工程实际问题,教材通常又不交代理论知识的来龙去脉。
数据库这门课程也不例外,包含了很多难以理解的理论知识,如关系的笛卡尔乘积运算、属性集下函数依赖集的闭包、函数依赖集下属性子集的闭包、第四范式、第五范式等。学生如果只是学习教材上的内容,很难领会并掌握这些知识,要运用这些知识就更难了。数据库管理是一个具体的工程问题,学习数据库知识就是要掌握解决工程实际问题的有效方法。在教材上,我们通常只能看到理论知识本身,并不能看到其形成过程,其应用案例通常也并不是典型的工程实际问题。因此,课程教学须将理论知识与工程实际问题进行翻转:从工程实际问题入手,通过分析与探究,使学生领会理论知识的本质含义及应用技巧,再指导工程实际问题的解决。只有这样,学生对课程知识才会有透彻的感悟,并在今后的工作中遵循和运用。
在数据库课程教学中,将理论知识与具体工程问题对应起来,是帮助学生透彻理解与掌握课程知识的有效方法。如关系的笛卡尔乘积运算是数据库管理中两个表之间做联接运算的数学理论依据,而两个表之间的联接运算是为了实现两个表中行记录的横向组合,以满足实际工作中的业务需求。具体到实际案例中,数据库的学生数据表中有姓名和学号两列,选课数据表中有学号、课程和成绩3列,而用户实际需要的学生成绩数据表则要求有姓名、学号、课程、成绩这4列;用户需要的学生成绩数据表在数据库中并不存在,需用数据库中的学生数据表和选课数据表做联接运算来实时生成。知道上述实际业务需求的解决过程,反过来理解笛卡尔乘积运算这个理论知识就直观容易了,其本质含义是两个集合中的元素之间所有可能的组合形式。
用户通过应用程序提供的操作界面来访问数据库,完成想做的事情。数据存放在数据库中,由数据库管理系统统一管理,这就是数据库系统的统一架构。数据库管理中的工程实际问题可梳理成5类:数据正确性问题、数据完整性问题、数据操作的简单性问题、数据安全性问题以及数据处理性能问题,如图1所示。数据的正确性问题可以进一步分为两个子类:①无故障情况下的数据正确性问题;②有故障情况下的数据正确性问题。
无故障情况下的数据正确性问题是数据库管理中最为重要的问题,根源在于用户的数据存在交集。如果所有用户的数据在数据库中都原样存储,就会出现数据冗余存储现象。即使系统在无故障情况下,数据冗余也会引起数据不一致、数据更新异常、数据错误等问题。因此,用户数据在数据库中不能原样存储,必须合理组织。另外,系统故障也难以避免,如软件故障、硬件故障、停电甚至地震、恐怖袭击等灭顶性灾难,都会对数据库中的数据产生破坏性影响,引起数据错误甚至数据丢失。用户的数据全都存储在数据库中,绝对不允许发生数据不正确的情形。
图1 梳理分类出的数据库管理工程问题图谱
要保证数据的正确性,就必须严格按照实体与关系的模式来设计数据库中的表。这样设计出来的表与实际工作中用到的业务数据表并不一致,从而引出数据操作的简单性问题。业务数据表的生成通常需要对数据库中的多个表执行联接、选择、投影等一系列运算,这些概念和法则并不能轻易掌握,因此必须要有相应的技术手段和方案为用户屏蔽它们,实现数据操作的简单性。
数据库存储了企业的所有数据,所有用户的数据也全都存放在数据库中。数据要有安全性,就必须对每个用户标识身份,明确其能访问的数据,并进一步明确能执行哪些操作。只有这样,数据安全性才有保障。安全保障机制必须既简单明了又完备,安全管理才不会出现漏洞,安全性才会有保障。
数据不仅要有正确性保障、安全性保障以及操作简单性保障,还要有完整性保障。正确性保障要求数据库中的数据严格按照实体与关系的模式来组织,分类存储。因此,数据库中的表分为实体表和事件表两类,实体对象和事件对象都是以行记录方式存于表中。为了克服对象的重复存储,需要标识对象。另外,对象之间的关系必须标明并且维系好,才能通过表与表间的联接运算,正确地组合出用户所需的业务数据。同时,数据库中存储的数据不仅都具有现实含义,还应符合企业的业务规则。这些数据完整性需求都要有相应的解决方案。
在数据库系统中,数据库服务器的负载非常繁重,数据处理的性能问题非常突出。由于所有用户的数据操作都要交由数据库服务器来完成,加上所有用户的数据都存放在数据库中,因此数据库中的数据是海量的,而对海量的数据进行操作,非常费时耗力。如果数据处理效率不高,那么用户的请求就不能及时响应,客户对系统的性能需求就不能得到满足。如何实现数据的高效处理,这是必须要解决的一个关键问题。
数据库管理中的工程实际问题被梳理分类之后,问题图谱就能清晰显露出来。数据库知识就是指为解决这些工程实际问题而提出的概念、法则、定理和框架。基于问题图谱梳理出的数据库知识图谱如图2所示。数据库知识中最核心的概念是关系数据模型。采用关系数据模型,能够解决数据管理中的上述问题。当然,并不是关系数据模型自身就能使这些问题迎刃而解,而是人们以关系数据模型为基础,研究出这些问题的解决方案。
采用关系数据模型能够解决无故障时的数据正确性问题。当然正确性的取得还需进一步附加约束条件,那就是数据库的设计要合理。判别设计合理的准绳是5个范式,行之有效的设计方法是实体关系建模法。在有故障时,数据正确性保障通过故障恢复来取得数据,故障恢复采用冗余策略。在无故障时,每项数据操作除了施加于数据库之外,还记录在日志里。日志载体首先是本地内存,再延伸至专用的日志磁盘,还可通过网络进一步延伸至异地的备用服务器。从故障恢复原理可知,日志磁盘和数据库磁盘不能是同一个物理磁盘。在无故障时,往磁盘记日志,其特点是只写不读,写的频率非常高。因此,日志磁盘只能用来专记日志,不能兼作他用。
图2 数据库知识图谱
数据的正确性保障使得数据库中的表并不与实际工作中用到的业务数据表相一致。业务数据表的生成通常要对数据库中的多个表执行联接、选择、投影等一系列运算。为了替用户屏蔽这些繁杂的关系代数知识,视图概念应运而生。视图的功效是使得用户看到的数据库是一个业务数据表的集合,而不是实体表和事件表的集合。当然,在视图一级,还是要求用户掌握简单的数据操作语言。为了进一步简化,又引入了存储过程概念。存储过程封装了数据操作语言,以函数调用方式来实现对数据库的访问。在存储过程这一级,对数据库的访问,用户无需具备任何数据库知识,就能完成自己想做的数据操作。数据库应用程序还进一步把对数据库的访问变成观看屏幕、点击鼠标和敲击键盘。总之,通过数据库管理系统、视图、存储过程和应用程序四级简化,数据库系统变得人人都能操作使用。
数据安全性知识相对易于理解,其保障机制与常见的公共安全机制完全一致。要登录数据库,所有用户都需要用户名和密码。用户登录后,要访问数据库中的每一个对象,还有权限要求。权限的授予可用<授予者,对象,权限,被授予者>四元组来标识。权限管理有3条准则:①某个对象,其创建者拥有对其访问的全部权限;②一个用户可将其拥有的权限授予给其他用户;③授权者可收回其授予出去的权限,权限的收回具有连带性。数据库中的另一种安全机制是审计,审计就如同在公共场所安装摄像机,对登录进数据库的用户的一举一动都进行记录。一旦发现安全问题,就可调阅审计记录,查清事实真相。
数据完整性知识十分重要,设计者只有领悟透彻,设计开发出的数据库系统才会鲁棒和稳固。数据完整性有4大保障机制:主键约束、外键约束、域约束和业务规则约束。主键起到标识对象的作用,因此数据库中的每个表都必须定义主键。外键起着标识关系的作用,数据库管理系统用它来维护好对象间的关系,防止假关系的出现,防止因数据更新而导致关系脱断。主键的标识必须精准,外键的标识则不允许出现疏忽遗漏,否则后患无穷。对4类数据完整性约束,数据库设计者都要用SQL语言将其表达出来,告知数据库管理系统。其中,前3类约束都是在CREATE TABLE语句中定义,业务规则约束通常实现在存贮过程或触发器来表达。
数据处理性能与硬件特性、数据特性和访问特性密切相关。数据库中的数据存储在磁盘上,有量的概念。数据量大,占用的磁盘空间就大。磁头读写数据时,要移动定位。磁头移动的路程越长,所耗时间就越多,性能就越差。因此尽量减小磁头移动路程对提高性能至关重要。有效方法之一是将用户访问频繁的数据放置在中央位置,把联系紧密的数据邻近存储。将数据存储在磁盘上,处理则由CPU来完成;在CPU和磁盘之间增设缓存,可实现磁盘访问的批量化,有效减少磁盘访问次数,缩短磁头移动路程。缓存与CPU邻近,访问速度快,性能显著提升。另外,减少无效运输量对性能提升也至关重要。查询一个表时,原始方法是将其所有记录从磁盘运输到CPU去逐一检查;符合条件的记录通常只占很少一部分,对于那些不符合条件的记录所做的运输都是无效运输。对此,创建索引能显著减少无效运输量。
数据库课程知识抽象难懂,教学中存在学生学习掉队、学生对课程知识领悟不透彻的突出问题。对数据库课程知识做简洁通俗化梳理,是缓解该问题的有效方法。学习数据库知识的目的是掌握解决工程实际问题的有效方法,与理论知识的抽象深奥性相对应,工程实际问题具有看得见和摸得着的特点。通过探究工程实际问题,展示课程概念的由来,揭示课程知识的本质含义,能够变抽象为直观,变深奥为通俗。
[1]顾容, 张蜜, 杨青青, 等. 基于SPOC翻转课堂的探讨:实证与反思[J]. 高教探索, 2017 (1): 27-32.
[2]陈永广. 找原因堵隐患巧预防: 论设计缺陷的特征和预防[J]. 中国技术监督, 2013 (10): 56-57.
[3]王春枝, 王立柱. 辩证内含丰富的算法举例[J]. 计算机教育, 2017 (1): 159-161.
[4]叶霞, 罗蓉, 李海龙. 基于认知规律的数据库课程教学设计[J]. 计算机教育, 2017 (1): 95-98.