计算思维培养与《数据库原理与应用》教学
2014-10-24韦美雁
韦美雁
(湖南科技学院 计算机与通信工程系,湖南 永州 425199)
引 言
在计算机科学中,数据库是十分重要且发展迅速的重要分支。随着各种应用领域对数据管理的需求越来越多,《数据库原理及应用》这门课程的重要性也日益显著,它不仅是高校计算机类专业的主干课程,而且也成为许多非计算机专业学生的必修课或选修课程。亦即数据库的操作和管理成为了大学通识教育的内容,而“计算思维能力培养是大学通识教育的重要组成部分”[1]。在《数据库原理及应用》的教学中注重计算思维的培养是非常有意义的。
1 计算思维的基本思想
2006年3月,美国卡内基·梅隆大学计算机科学系主任周以真(Jeannette M.Wing)教授在美国计算机权威期刊《Communications of the ACM》杂志上提出并定义了计算思维(Computational Thinking)。周教授认为:计算思维是运用计算机科学的基础概念进行问题求解、系统设计、以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。董荣胜教授在文献[2]、[3]中定义:计算思维是运用计算机科学的思想与方法进行问题求解、系统设计,以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。我们可以通俗的理解为:计算思维是以设计和构造为特征,并以计算机学科为典型代表。
2 计算思维培养与《数据库原理与应用》教学
《数据库原理与应用》理论知识较多,包括关系数据库、SQL基础、数据库的安全性和完整性、关系数据理论、数据库设计、数据库的编程、数据库恢复技术和并发控制等方面。为了更好的培养学生的计算思维能力,在教学中注重对课程的教学设计是非常必要的。而就本课程而言,计算思维能力培养可从课堂教学和实践教学中融入。
2.1 从计算思维出发的课程引入
计算思维是以设计和构造为特征。《数据库原理及应用》正是一门讨论如何设计和构造数据库系统的课程,因此对于课程的引入,我们首先要有个宏观的体验,例如在介绍数据库保护时需要学生理解事务、并发控制等概念。我们从实例引入,诸如银行系统进行转账,要从甲账户转帐100元到乙账户。这里要经历两步,第一步从甲账户-100,第二步给乙账户+100。但是,若在系统刚好操作完第一步时停电了,那么这转账的事件是否已经完成,数据库系统的数据是否会出现异常?另如购买车票,甲乙同时进入购票系统购买火车票,此时他们读取的数据是10票,那么,甲买6张,乙买5张,最后系统剩余多少张票?让他们体会事务在在处理时,如果没有一定的技术措施,那么将会发生造成数据的存取错误,破坏数据的一致性和完整性,从而引入课程。
2.2 结合计算思维的课堂教学
依然以“数据库保护”这章的内容来阐述我们结合计算思维的课堂教学,引导学生学习领会计算思维的方法,从而更好的体会计算思维的设计与构造的特点。
(1)事务概念简介:通过课程引入,同学们初步了解到维护数据库数据一致性的基本手段是事务,进而介绍事务的四大特性和事务的处理模型,同时让同学们对事务的ACID(原子性、一致性、隔离性、持续性)四大特性有充分的了解。
(2)事务并行异象:数据库数据是共享的,那么事务的并行会出现的异常现象有丢失数据修改,读脏数据,不可重复读,产生“幽灵”数据。
(3)事务并行异象处理:为了避免异象(丢失数据、读脏数据、不可重复读、产生“幽灵”数据)的发生,我们设计的处理措施是加锁,那么加锁如何设定规则?能达到预想的避免异象发生吗?进而引导学生去发现为了不丢失数据修改,我们应该何时申请X(或者S)锁,持锁时间为多长,何时释放锁等问题。同样,为了不读脏数据,我们又该如何设计,为了可重复读又该如何设计。通过这段课程介绍,让学生充分体会计算机科学就是设计和构造的科学。
2.3 训练计算思维的实践教学
在实践课程中,为培养学生的计算思维能力,老师通过给出实验任务,提出问题,让学生或独立或协作的去探索问题的解决方法,发现问题的本质。
例如,要求学生创建一个数据库,其中包含三个表:学生表、课程表和 学生选课表,在创建时要给出各表的合适的属性,选取合适的主码,指出各表之间的联系。在这个任务中,其实考察的是学生对数据完整性的理解。
数据完整性是一个非常重要的概念,在数据库原理教材[4]中它的贯穿性得到了很好的体现。在理论部分,关系数据库提出了它的相关概念;在设计部分,数据需求分析中数据满足完整性约束的数据在数据字典中要加以体现,并通过概念结构、逻辑结构设计来表达;在实施部分常常利用触发器、SQL语言、数据库管理系统的基本功能等按照数据完整性约束的信息来具体加以实现。因此在实践教学中引导学生在创建数据库时对数据完整性的理解和应用,能够很好的培养学生的计算思维能力和创新能力。
数据完整性具体涉及到三方面,实体完整性、参照完整性、用户自定义完整性[4][5]。实体完整性的是保证实体的唯一性,与其他实体的可区分性,因此主码的设定非常重要,例如学生数据库中的学生表,其主码设定最好是“学号”而不是姓名或其他属性;当然我们的问题是,如果约定在该数据库中,同一个班的同学的姓名是不同的,那么,除了“学号”可作为主码,“姓名”是否可以作为主码?我们平时在设定主码时要注意什么?显然,在这种条件下“姓名”是可以作为主码的,因为它能表达实体的唯一性。
参照完整性指多个实体或表之间的关联关系。在学生课程 ER图(如图一)中,有两个实体“学生”、“课程”,还有一个联系“选课”,该联系方式是多对多的联系。当我们把该关系模式转化为关系时,除了实体转换成相应的表“学生表(sno,sname,ssex,sdept)”、“课程表(cno,cname,credit)”外,联系“选课”也要转换为表“选课表”,至于选课表属性的设计初学者很茫然,其实我们在此只需把握一点,与该联系“选课”相关的实体是谁,在属性中表现该实体就行,于是,我们可以设计其属性为“(sno,cno,grade)”。显然“选课表”中的课程号(cno)在“课程表”中应该存在,“选课表”中出现的学生的学号(sno)在“学生表”中应该存在,表中“sno、cno”属性的取值要参照“学生表”和“课程表”的取值,这个属性我们称为外码,而且它还有一个特点,外码属性在父表中应该是主码属性。如果在表的设计过程中未曾注意到参照完整性,那么就可能出现学生选课表中的学号或课程号不曾在学生表或课程表中出现,即没有该学生存在或者根本没有开设该课程,但在我们却在选课表中想凭空录入成绩是不可能的,就会导致错误(数据不一致)。
用户自定义完整性主要是指指明表中属性的取值范围(域),避免属性的取值与应用语义矛盾,例如性别取值非男即女,不能是其他。
3 结语
“科学思维不仅是一切科学研究和技术发展的起点,而且始终贯穿于科学研究和技术发展的全过程,是创新的灵魂”[6]。在计算机科学技术持续迅猛发展的今天,数据库原理的重要作用显然。而在素质教育的今天,学生的能力培养尤为重要,在学生离开母校 N年之后,他或许已经想不起在学校学过的ABCD,但只要他的计算思维能力(科学思维能力的一种)存在,那么就是我们的最大的成功。
图1.学生课程ER图
[1]陈国良,童荣胜.计算思维与大学生计算机基础教育[J].中国大学教学,2011,(1).
[2]董荣胜.计算机科学导论——思想与方法[M].北京:高等教育出版社,2007,(9).
[3]董荣胜,古天龙.计算思维与计算机方法论[J].计算机科学,2009,36(1):1-4.
[4]何玉洁.数据库原理与应用教程[M].北京:机械工业出版社,2013,(6).
[5]王珊,萨师煊.数据库系统概论[M].北京:高等教育出版社,2006,(5).
[6]科技部,等.关于创新方法工作的若干意见[EB/OL].http://www.gdstc.gov.cn.