李志辉
摘 要: 针对学生在Access数据库中建立表间关系时出现的问题,探讨了建立表间关系所涉及到的主键、实施参照完整性、连接类型等关键性知识点的教学方法及教学过程中应注意的事项,以达到引导学生深刻理解和正确运用这些知识点的目的,从而提高课堂教学实效。实践证明,这些教学方法是行之有效的,取得了良好的教学效果。
关键词: Access数据库; 表间关系; 课堂教学; 教学方法
中图分类号:G642.4 文献标志码:A 文章编号:1006-8228(2013)02-55-03
Discussion on teaching of establishing the relationship between the tables in Access database
Li Zhihui
(School of Information Management, Hubei University of Economics, Wuhan, Hubei 430205, China)
Abstract: Aiming at the problems that the students confront when establishing the relationship between the tables, the teaching methods of the key points of knowledge involved in primary key are discussed, together with referential integrity and connection type. Some important items during the teaching process are given to guide the students to deeply understand and correctly apply this knowledge, to enhance the effectiveness of classroom teaching. The result shows that the teaching approach is effective. Its application has obtained favorable teaching effects.
Key words: Access database; relationship between tables; classroom teaching; teaching method
0 引言
Access数据库及其应用课程是我校面向非计算机专业学生开设的公共基础课程,也是许多非计算机专业学生参加全国计算机等级考试(二级)所选择的科目。在Access数据库中,建立表间关系是一个重要的知识点,同时也是教学的难点,因为它涉及到数据库中主外键、实施参照完整性、关系连接类型等多个知识点,具有一定的知识综合性,学生只要有一个相关的知识点没有弄清楚,就无法正确建立表间关系,而表间关系建立的正确与否,将直接关系到用户能否从Access数据库的多个表中提取出符合要求的数据。因此,探讨Access数据库中建立表间关系的教学方法,有助于提高教师对此知识点进行课堂教学的实效,更好地帮助学生深入理解相关知识点,从而显著提升学生正确运用此知识点解决实际问题的能力。
本文以学生在完成建立表间关系实验的过程中出现的问题作为切入点,剖析了教师在讲授主键、关系建立前提条件、实施参照完整性、关系连接类型等建立表间关系所涉及到的相关知识点时应注意的事项,并基于笔者的教学实践阐述了实施参照完整性、关系连接类型这两个知识点的具体教学实施过程。
1 学生对知识点理解及运用上存在的问题
通过指导学生进行Access数据库实验以及批改实验报告,笔者发现了一些问题,并对这些问题进行了归纳总结。
⑴ 很多学生对主键概念认识模糊,不能为每个表设置正确的主键,特别是对于一个表的主键由多个字段构成的情况,由于在表设计视图中多字段主键中的每个字段前都有一个作为主键标记的钥匙,有些学生错误地认为这个表有多个主键。
⑵ 有些学生错误地认为两个表只要有名称相同的字段就可以建立关联关系,忽略了建立表间关系的两个前提要求。
⑶ 由于关联字段数据类型不同,或数据录入错误等原因导致对两个关联表不能实施参照完整性时,较多学生无法探究出原因。
⑷ 学生在Access 2003软件的“编辑关系”对话框(如图1所示)中勾选“实施参照完整性”后,习惯性地将“级联更新相关字段”和“级联删除相关记录”两个选项进行勾选,而对选中这两个选项的意义并不十分清楚。
图1 “编辑关系”对话框
⑸ 学生习惯于系统默认创建的涉及内连接的多表查询,对涉及到外连接的多表查询问题表现出束手无策,不知道通过Access 2003软件中的“联接属性”对话框(如图2所示)就可以轻松解决,并且对这个对话框中三个选项的意义也缺乏理解。
图2 “联接属性”对话框
针对学生在建立表间关系知识点理解和运用上存在的这些问题,笔者在教学中进行了一系列积极的探索,形成了一些较为有效的教学方法。
2 建立表间关系知识点的教学方法
通常,建立表间关系分为以下几个步骤:①为每个表设置主键;②为两个表的公共字段创建表间关系连线;③实施参照完整性;④根据需要设置两个表之间的连接类型。以下对这四个步骤中涉及到的几个关键性知识点的教学方法以及教学过程中应注意的事项分别进行介绍。
2.1 主键
主键是表中惟一能够标识一条记录的字段或字段的组合,用来保证实体的完整性[1]。对于非计算机专业的学生,由于没有学习利用函数依赖及推理规则求解主键的方法,因此应学会利用主键的定义,并结合描述现实世界已知事实的数据语义来确定表的主键的方法。这就要求教师在教学时应通过大量实例让学生在反复演练中掌握此方法。具体来讲,教师应重点讲解以下几点。
⑴ 通过将表中涉及的概念与信息世界中相关的概念进行类比,帮助学生理解主键的概念。在Access中,用“表”表示同一类实体,即实体集,表的结构就是一个实体型,表中的每一条记录表示的就是一个具体的实体,主键对应的就是实体的标识码。主键的值确定了,它所代表的实体就确定了,该实体的相关信息(其他字段的取值)当然也就确定了,就像身份证号可以惟一确定我们每一个人的身份一样。可以借此引申来说明主键的值可以惟一确定其他字段的取值。
⑵ 根据主键中包含的字段个数,可以将主键分为“单字段主键”和“多字段主键”两类。如果某字段中包含的都是惟一的值,可以将该字段指定为主键,这就是“单字段主键”;在不能保证任何单个字段都包含惟一值时,可以将两个或更多的字段的组合指定为主键,这就是“多字段主键”。教师必须向学生强调每个表只能定义一个主键,多字段主键也只是一个主键,只不过这个主键是由多个字段组合而成。前面已经提到过,由于在表设计视图中“多字段主键”中的每个字段前都有一个作为主键标记的钥匙,因此有些学生容易将“多字段主键”错误地理解为多个主键,教师必须对此向学生明确说明。
⑶ 应向学生强调系统对主键的取值要求。在Access数据库中,主键用来保证实体的完整性。按照实体完整性的要求,主键不能取空值,也不能取重复值。为了强化学生对此的认识,教师在为表设置主键后,可以在表的“数据表视图”中为主键输入空值或重复值,从而让学生看到Access 2003软件给出的错误提示。
⑷ 有必要区别一下主键和候选键的概念。表中能够惟一标识一条记录的字段或字段的组合可能不是惟一的,凡在表中能够惟一标识一条记录的字段或字段的组合都可成为候选键;在候选键中可以选定一个作为表的主键。没有选定为主键的其他候选键,由于它们的取值具有惟一性,所以应考虑给其建立惟一索引。
⑸ 在创建表的结构时如果没有指定主键,在对表进行保存操作时,系统会询问是否需要创建主键,如果单击“是”按钮,系统将会为表自动创建一个“自动编号(ID)”字段作为主键。建议学生最好不要将这个“自动编号(ID)”字段作为主键,而应根据数据的语义自己创建主键。
2.2 创建表间关系的两个前提
为每个表设置正确的主键后,接下来就应该创建表间关系连线。创建表间关系连线时,应使两个前提得到满足,一是要保证建立关联关系的两个表具有公共字段,二是每个表都要以该字段建立索引。如果不满足这两个前提,即使创建了表间关系连线,也无法正确实施参照完整性。在教学中,对于这两个前提,教师应向学生强调以下两点。
⑴ 两个表相关联的公共字段不一定要有相同的名称(名称相同当然更容易识别),但它们的数据类型必须相同或者兼容。对于“自动编号”类型与“数字”类型字段相关联、两个“数字”字段相关联,还要求它们的“字段大小”属性相同,比如都是“长整型”。对于公共字段,学生更容易关注“名称相同”这个非必要的要求,而忽略对数据类型、字段大小等这些关键性要求,教师对此应予以纠正。
⑵ 每个表都要为关联字段建立正确的索引,因为Access会根据创建的索引类型来确定两个表是“一对一”的关系还是“一对多”的关系。主表中的关联字段要建立主索引(主键)或惟一索引(字段值无重复),如果为从表中的关联字段建立的是主索引或惟一索引,则系统会确定两个表具有“一对一”的关系;如果为从表中的关联字段建立的是普通索引(字段值有重复)或没有建立索引,则系统会确定两个表具有“一对多”的关系。
2.3 实施参照完整性
创建表间关系连线时,必须设置“实施参照完整性”。参照完整性用来建立表间的引用完整性,对外键的取值进行了明确的限制。特别强调,教师在给学生讲授完参照完整性的定义及作用后,应通过演示法向学生重点展示可能破坏参照完整性的各种情况以及系统采取的违约处理方法,学生只有亲眼看到了,才会对此有更深刻的认识和理解。
下面以“学生”表和“成绩”表为例,介绍笔者具体的做法。两个示例表的结构如图3、图4所示。
图3 “学生”表 图4 “成绩”表
分两种情况向学生演示Access 2003软件系统对破坏参照完整性的处理方法,一是不选择“编辑关系”对话框中的“级联更新相关字段”和“级联删除相关字段”这两个选项,二是选中这两个选项。
⑴ 当没有选中这两个选项时,分别对主表和从表进行增删改操作,让学生观察系统对操作所做出的反应。当要在“成绩”表(从表)中插入一个“学生”表(主表)中不存在的学号,或要将“成绩”表中的某个学号更改为“学生”表中不存在的学号时,系统都会给出错误提示,原因就是这样的插入和修改操作违反了参照完整性规则,系统采取的应对措施是拒绝执行;如果对“成绩”表进行删除操作,显然不会破坏参照完整性,系统可以正确执行。当要在“学生”表中插入一条记录时,显然也不会破坏参照完整性,系统可以正确执行;如果在“学生”表中修改某个已选课学生的学号或删除该选课学生的信息时,系统同样会给出错误提示,因为对主表的这两个操作同样违反了参照完整性规则,系统通过拒绝执行的方式进行应对。
⑵ 当选中这两个选项后,同样分别对主表和从表进行增删改操作,让学生观察系统对这一操作所做出的反应。当对“成绩”表进行增删改操作时,可以发现系统做出的反应没有什么变化。当在“学生”表中修改了某个已选课学生的学号时,系统并没有给出错误提示,而是将“成绩”表中相关的学号一并修改,这就是所谓的“级联更新”;当在“学生”表中删除了某个已选课学生的信息时,系统同样没有给出错误提示,而是将“成绩”表中学号相同的记录进行同步删除,这就是所谓的“级联删除”。
演示完成后,先请学生对可能破坏参照完整性的各种情况以及系统相应的违约处理方法进行归纳,然后再通过表格的形式将结果反馈给学生,如表1所示。
表1 可能破坏参照完整性的情况及违约处理[2]
[主表\&从表\&违约处理\&可能破坏参照完整性\&插入记录\&拒绝执行\&可能破坏参照完整性\&修改外键值\&拒绝执行\&删除记录\&可能破坏参照完整性\&拒绝执行/级联删除\&修改主键值\&可能破坏参照完整性\&拒绝执行/级联更新\&]
为了与课堂教学内容衔接,我校设置的实验内容顺序是先让学生分别建立各个表的结构,紧接着录入实验指导书上事先给定的大量数据,然后再去建立表间关系。这种做法存在一个问题:如果学生录入的数据有错误,违反了参照完整性规则的要求,在创建表间关系时就无法实施参照完整性,学生只有修改或删除不符合要求的数据,才能实施参照完整性。要让学生从大量数据中找出不符合要求的数据,是一个较为繁琐的工作。针对这种情况,笔者认为教师要明确告知学生正确的做法是先建立表间关系实施参照完整性,再去录入数据,这样违反参照完整性规则的错误数据就无法保存在表中。
2.4 关系连接类型
在“编辑关系”对话框(如图1所示)中单击“联接类型”按钮,会弹出“联接属性”对话框,其中有三个单选按钮,它们定义了表间关系的三种连接类型:内连接、左外连接和右外连接(在Access数据库中不支持全外连接)。在表对象中,我们无法向学生演示这三种连接类型处理数据的具体方法,因此笔者考虑新建一个多表查询对象来进行验证。
具体讲授时,先使用查询的设计视图新建一个查询,将“学生”表和“成绩”表分别添加到查询“设计视图”窗口中,作为新建查询的数据源。由于在前面已经建立了表间关系,所以在查询“设计视图”窗口中会显示出系统自动创建的表示表间关系的连线。在连线上单击右键,会弹出一个快捷菜单,选择其中的“联接属性”菜单项,也可以调出其中的“联接属性”对话框(如图2所示)。为了给随后的提问做好铺垫,笔者先让学生分别查看一下“学生”表和“成绩”表中的记录数(假设这两个表中都有10条记录),然后从以下几个方面进行讲授。
⑴ 通过设计好的查询题目,导入内连接和外连接知识点。
例如,给出查询题目1:创建一个查询,查找并显示所有选课学生的“姓名”、“课程号”和“成绩”三个字段的内容。这个查询需要通过内连接来完成。由于建立表间关系后系统默认的连接类型就是内连接(即对话框中的第一个选项),因此学生不需要更改“联接属性”对话框中的连接类型,只要分别双击“学生”表和“成绩”表中的“姓名”、“课程号”和“成绩”三个字段,然后运行查询就可以得到所需要的查询结果。
给出查询题目2:创建一个查询,查找并显示所有学生的“姓名”、“课程号”和“成绩”三个字段的内容。由于这个查询涉及到选课和没选课的所有学生信息,如果不更改“联接属性”对话框中的连接类型,那查询结果里面就不包括没有选课的学生信息,显然不合题意[3]。因此根据题目要求,这个查询应使用左外连接(应选中对话框中的第二个选项),才能把选课和没选课的所有学生的信息都查找出来。
⑵ 通过对不同查询结果中记录数目变化原因的提问,引发学生对连接类型知识点探究的兴趣。
“学生”表和“成绩”表中都有10条记录,在前面内连接的查询结果中出现了10条记录;将连接类型更改为左外连接,查询结果中出现了14条记录,相对内连接多出了4条记录,提问要求学生思考为什么多出了4条记录;将连接类型再更改为右外连接(应选中对话框中的第三个选项),查询结果又变成了10条记录,和内连接完全一样,提问并要求学生思考为什么在此处右外连接和内连接的查询结果会是一样的;然后再将两个表的表间关系连线删除,这时发现查询结果中有100条记录,提问要求学生思考如何解释查询结果中会出现100条记录。
⑶ 切换到查询的“SQL视图”,让学生观察系统自动生成的SQL语句有什么不同,以达到对前面所讲知识点进行佐证的目的。
对于内连接,SQL语句指定的表示连接类型的关键字是“INNER JOIN”;对于左外连接,SQL语句指定的关键字是“LEFT JOIN”;对于右外连接,SQL语句指定的关键字是“RIGHT JOIN”。这三种连接类型的连接条件都是“学生.学号=成绩.学号”。而如果删除了两个表的表间关系连线,在SQL语句中就看不到连接条件,说明如果没有指定两个表的连接条件,这时候两个表进行的就是笛卡尔积运算。SQL语句中使用的关键字很多都是学生比较熟悉的英文单词,因而在一定程度上可以强化学生对连接类型知识点的记忆。
3 结束语
教学有法,教无定法,追求教学得法。恰当的教学方法,有利于提高学生学习的积极性,有利于学生对所学知识的掌握和运用,有助于学生思维能力的培养,有助于提高学习效率和课堂效率。教学实践表明,对于建立表间关系这一重要知识点的教学,采用上述教学方法是有效且得当的,在较短的授课学时内,学生不仅能够理解建立表间关系的相关知识,而且能熟练运用这些知识去解决实际问题,确实达成了教学目标和要求,取得了良好的教学效果。
参考文献:
[1] 孙宝林,崔洪芳.Access数据库应用技术[M].清华大学出版社,2010.
[2] 王珊,萨师煊.数据库系统概论(第四版)[M].高等教育出版社,2006.
[3] 段玉春,朱长江.几个ACCESS疑难问题的探析[J].电脑知识与技术,2011.7(33):8113-8114