摘 要: 針對學(xué)生在Access數(shù)據(jù)庫中建立表間關(guān)系時出現(xiàn)的問題,探討了建立表間關(guān)系所涉及到的主鍵、實(shí)施參照完整性、連接類型等關(guān)鍵性知識點(diǎn)的教學(xué)方法及教學(xué)過程中應(yīng)注意的事項(xiàng),以達(dá)到引導(dǎo)學(xué)生深刻理解和正確運(yùn)用這些知識點(diǎn)的目的,從而提高課堂教學(xué)實(shí)效。實(shí)踐證明,這些教學(xué)方法是行之有效的,取得了良好的教學(xué)效果。
關(guān)鍵詞: Access數(shù)據(jù)庫; 表間關(guān)系; 課堂教學(xué); 教學(xué)方法
中圖分類號:G642.4 文獻(xiàn)標(biāo)志碼: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數(shù)據(jù)庫及其應(yīng)用課程是我校面向非計(jì)算機(jī)專業(yè)學(xué)生開設(shè)的公共基礎(chǔ)課程,也是許多非計(jì)算機(jī)專業(yè)學(xué)生參加全國計(jì)算機(jī)等級考試(二級)所選擇的科目。在Access數(shù)據(jù)庫中,建立表間關(guān)系是一個重要的知識點(diǎn),同時也是教學(xué)的難點(diǎn),因?yàn)樗婕暗綌?shù)據(jù)庫中主外鍵、實(shí)施參照完整性、關(guān)系連接類型等多個知識點(diǎn),具有一定的知識綜合性,學(xué)生只要有一個相關(guān)的知識點(diǎn)沒有弄清楚,就無法正確建立表間關(guān)系,而表間關(guān)系建立的正確與否,將直接關(guān)系到用戶能否從Access數(shù)據(jù)庫的多個表中提取出符合要求的數(shù)據(jù)。因此,探討Access數(shù)據(jù)庫中建立表間關(guān)系的教學(xué)方法,有助于提高教師對此知識點(diǎn)進(jìn)行課堂教學(xué)的實(shí)效,更好地幫助學(xué)生深入理解相關(guān)知識點(diǎn),從而顯著提升學(xué)生正確運(yùn)用此知識點(diǎn)解決實(shí)際問題的能力。
本文以學(xué)生在完成建立表間關(guān)系實(shí)驗(yàn)的過程中出現(xiàn)的問題作為切入點(diǎn),剖析了教師在講授主鍵、關(guān)系建立前提條件、實(shí)施參照完整性、關(guān)系連接類型等建立表間關(guān)系所涉及到的相關(guān)知識點(diǎn)時應(yīng)注意的事項(xiàng),并基于筆者的教學(xué)實(shí)踐闡述了實(shí)施參照完整性、關(guān)系連接類型這兩個知識點(diǎn)的具體教學(xué)實(shí)施過程。
1 學(xué)生對知識點(diǎn)理解及運(yùn)用上存在的問題
通過指導(dǎo)學(xué)生進(jìn)行Access數(shù)據(jù)庫實(shí)驗(yàn)以及批改實(shí)驗(yàn)報告,筆者發(fā)現(xiàn)了一些問題,并對這些問題進(jìn)行了歸納總結(jié)。
⑴ 很多學(xué)生對主鍵概念認(rèn)識模糊,不能為每個表設(shè)置正確的主鍵,特別是對于一個表的主鍵由多個字段構(gòu)成的情況,由于在表設(shè)計(jì)視圖中多字段主鍵中的每個字段前都有一個作為主鍵標(biāo)記的鑰匙,有些學(xué)生錯誤地認(rèn)為這個表有多個主鍵。
⑵ 有些學(xué)生錯誤地認(rèn)為兩個表只要有名稱相同的字段就可以建立關(guān)聯(lián)關(guān)系,忽略了建立表間關(guān)系的兩個前提要求。
⑶ 由于關(guān)聯(lián)字段數(shù)據(jù)類型不同,或數(shù)據(jù)錄入錯誤等原因?qū)е聦蓚€關(guān)聯(lián)表不能實(shí)施參照完整性時,較多學(xué)生無法探究出原因。
⑷ 學(xué)生在Access 2003軟件的“編輯關(guān)系”對話框(如圖1所示)中勾選“實(shí)施參照完整性”后,習(xí)慣性地將“級聯(lián)更新相關(guān)字段”和“級聯(lián)刪除相關(guān)記錄”兩個選項(xiàng)進(jìn)行勾選,而對選中這兩個選項(xiàng)的意義并不十分清楚。
圖1 “編輯關(guān)系”對話框
⑸ 學(xué)生習(xí)慣于系統(tǒng)默認(rèn)創(chuàng)建的涉及內(nèi)連接的多表查詢,對涉及到外連接的多表查詢問題表現(xiàn)出束手無策,不知道通過Access 2003軟件中的“聯(lián)接屬性”對話框(如圖2所示)就可以輕松解決,并且對這個對話框中三個選項(xiàng)的意義也缺乏理解。
圖2 “聯(lián)接屬性”對話框
針對學(xué)生在建立表間關(guān)系知識點(diǎn)理解和運(yùn)用上存在的這些問題,筆者在教學(xué)中進(jìn)行了一系列積極的探索,形成了一些較為有效的教學(xué)方法。
2 建立表間關(guān)系知識點(diǎn)的教學(xué)方法
通常,建立表間關(guān)系分為以下幾個步驟:①為每個表設(shè)置主鍵;②為兩個表的公共字段創(chuàng)建表間關(guān)系連線;③實(shí)施參照完整性;④根據(jù)需要設(shè)置兩個表之間的連接類型。以下對這四個步驟中涉及到的幾個關(guān)鍵性知識點(diǎn)的教學(xué)方法以及教學(xué)過程中應(yīng)注意的事項(xiàng)分別進(jìn)行介紹。
2.1 主鍵
主鍵是表中惟一能夠標(biāo)識一條記錄的字段或字段的組合,用來保證實(shí)體的完整性[1]。對于非計(jì)算機(jī)專業(yè)的學(xué)生,由于沒有學(xué)習(xí)利用函數(shù)依賴及推理規(guī)則求解主鍵的方法,因此應(yīng)學(xué)會利用主鍵的定義,并結(jié)合描述現(xiàn)實(shí)世界已知事實(shí)的數(shù)據(jù)語義來確定表的主鍵的方法。這就要求教師在教學(xué)時應(yīng)通過大量實(shí)例讓學(xué)生在反復(fù)演練中掌握此方法。具體來講,教師應(yīng)重點(diǎn)講解以下幾點(diǎn)。
⑴ 通過將表中涉及的概念與信息世界中相關(guān)的概念進(jìn)行類比,幫助學(xué)生理解主鍵的概念。在Access中,用“表”表示同一類實(shí)體,即實(shí)體集,表的結(jié)構(gòu)就是一個實(shí)體型,表中的每一條記錄表示的就是一個具體的實(shí)體,主鍵對應(yīng)的就是實(shí)體的標(biāo)識碼。主鍵的值確定了,它所代表的實(shí)體就確定了,該實(shí)體的相關(guān)信息(其他字段的取值)當(dāng)然也就確定了,就像身份證號可以惟一確定我們每一個人的身份一樣??梢越璐艘陙碚f明主鍵的值可以惟一確定其他字段的取值。
⑵ 根據(jù)主鍵中包含的字段個數(shù),可以將主鍵分為“單字段主鍵”和“多字段主鍵”兩類。如果某字段中包含的都是惟一的值,可以將該字段指定為主鍵,這就是“單字段主鍵”;在不能保證任何單個字段都包含惟一值時,可以將兩個或更多的字段的組合指定為主鍵,這就是“多字段主鍵”。教師必須向?qū)W生強(qiáng)調(diào)每個表只能定義一個主鍵,多字段主鍵也只是一個主鍵,只不過這個主鍵是由多個字段組合而成。前面已經(jīng)提到過,由于在表設(shè)計(jì)視圖中“多字段主鍵”中的每個字段前都有一個作為主鍵標(biāo)記的鑰匙,因此有些學(xué)生容易將“多字段主鍵”錯誤地理解為多個主鍵,教師必須對此向?qū)W生明確說明。
⑶ 應(yīng)向?qū)W生強(qiáng)調(diào)系統(tǒng)對主鍵的取值要求。在Access數(shù)據(jù)庫中,主鍵用來保證實(shí)體的完整性。按照實(shí)體完整性的要求,主鍵不能取空值,也不能取重復(fù)值。為了強(qiáng)化學(xué)生對此的認(rèn)識,教師在為表設(shè)置主鍵后,可以在表的“數(shù)據(jù)表視圖”中為主鍵輸入空值或重復(fù)值,從而讓學(xué)生看到Access 2003軟件給出的錯誤提示。
⑷ 有必要區(qū)別一下主鍵和候選鍵的概念。表中能夠惟一標(biāo)識一條記錄的字段或字段的組合可能不是惟一的,凡在表中能夠惟一標(biāo)識一條記錄的字段或字段的組合都可成為候選鍵;在候選鍵中可以選定一個作為表的主鍵。沒有選定為主鍵的其他候選鍵,由于它們的取值具有惟一性,所以應(yīng)考慮給其建立惟一索引。
⑸ 在創(chuàng)建表的結(jié)構(gòu)時如果沒有指定主鍵,在對表進(jìn)行保存操作時,系統(tǒng)會詢問是否需要創(chuàng)建主鍵,如果單擊“是”按鈕,系統(tǒng)將會為表自動創(chuàng)建一個“自動編號(ID)”字段作為主鍵。建議學(xué)生最好不要將這個“自動編號(ID)”字段作為主鍵,而應(yīng)根據(jù)數(shù)據(jù)的語義自己創(chuàng)建主鍵。
2.2 創(chuàng)建表間關(guān)系的兩個前提
為每個表設(shè)置正確的主鍵后,接下來就應(yīng)該創(chuàng)建表間關(guān)系連線。創(chuàng)建表間關(guān)系連線時,應(yīng)使兩個前提得到滿足,一是要保證建立關(guān)聯(lián)關(guān)系的兩個表具有公共字段,二是每個表都要以該字段建立索引。如果不滿足這兩個前提,即使創(chuàng)建了表間關(guān)系連線,也無法正確實(shí)施參照完整性。在教學(xué)中,對于這兩個前提,教師應(yīng)向?qū)W生強(qiáng)調(diào)以下兩點(diǎn)。
⑴ 兩個表相關(guān)聯(lián)的公共字段不一定要有相同的名稱(名稱相同當(dāng)然更容易識別),但它們的數(shù)據(jù)類型必須相同或者兼容。對于“自動編號”類型與“數(shù)字”類型字段相關(guān)聯(lián)、兩個“數(shù)字”字段相關(guān)聯(lián),還要求它們的“字段大小”屬性相同,比如都是“長整型”。對于公共字段,學(xué)生更容易關(guān)注“名稱相同”這個非必要的要求,而忽略對數(shù)據(jù)類型、字段大小等這些關(guān)鍵性要求,教師對此應(yīng)予以糾正。
⑵ 每個表都要為關(guān)聯(lián)字段建立正確的索引,因?yàn)锳ccess會根據(jù)創(chuàng)建的索引類型來確定兩個表是“一對一”的關(guān)系還是“一對多”的關(guān)系。主表中的關(guān)聯(lián)字段要建立主索引(主鍵)或惟一索引(字段值無重復(fù)),如果為從表中的關(guān)聯(lián)字段建立的是主索引或惟一索引,則系統(tǒng)會確定兩個表具有“一對一”的關(guān)系;如果為從表中的關(guān)聯(lián)字段建立的是普通索引(字段值有重復(fù))或沒有建立索引,則系統(tǒng)會確定兩個表具有“一對多”的關(guān)系。
2.3 實(shí)施參照完整性
創(chuàng)建表間關(guān)系連線時,必須設(shè)置“實(shí)施參照完整性”。參照完整性用來建立表間的引用完整性,對外鍵的取值進(jìn)行了明確的限制。特別強(qiáng)調(diào),教師在給學(xué)生講授完參照完整性的定義及作用后,應(yīng)通過演示法向?qū)W生重點(diǎn)展示可能破壞參照完整性的各種情況以及系統(tǒng)采取的違約處理方法,學(xué)生只有親眼看到了,才會對此有更深刻的認(rèn)識和理解。
下面以“學(xué)生”表和“成績”表為例,介紹筆者具體的做法。兩個示例表的結(jié)構(gòu)如圖3、圖4所示。
圖3 “學(xué)生”表 圖4 “成績”表
分兩種情況向?qū)W生演示Access 2003軟件系統(tǒng)對破壞參照完整性的處理方法,一是不選擇“編輯關(guān)系”對話框中的“級聯(lián)更新相關(guān)字段”和“級聯(lián)刪除相關(guān)字段”這兩個選項(xiàng),二是選中這兩個選項(xiàng)。
⑴ 當(dāng)沒有選中這兩個選項(xiàng)時,分別對主表和從表進(jìn)行增刪改操作,讓學(xué)生觀察系統(tǒng)對操作所做出的反應(yīng)。當(dāng)要在“成績”表(從表)中插入一個“學(xué)生”表(主表)中不存在的學(xué)號,或要將“成績”表中的某個學(xué)號更改為“學(xué)生”表中不存在的學(xué)號時,系統(tǒng)都會給出錯誤提示,原因就是這樣的插入和修改操作違反了參照完整性規(guī)則,系統(tǒng)采取的應(yīng)對措施是拒絕執(zhí)行;如果對“成績”表進(jìn)行刪除操作,顯然不會破壞參照完整性,系統(tǒng)可以正確執(zhí)行。當(dāng)要在“學(xué)生”表中插入一條記錄時,顯然也不會破壞參照完整性,系統(tǒng)可以正確執(zhí)行;如果在“學(xué)生”表中修改某個已選課學(xué)生的學(xué)號或刪除該選課學(xué)生的信息時,系統(tǒng)同樣會給出錯誤提示,因?yàn)閷χ鞅淼倪@兩個操作同樣違反了參照完整性規(guī)則,系統(tǒng)通過拒絕執(zhí)行的方式進(jìn)行應(yīng)對。
⑵ 當(dāng)選中這兩個選項(xiàng)后,同樣分別對主表和從表進(jìn)行增刪改操作,讓學(xué)生觀察系統(tǒng)對這一操作所做出的反應(yīng)。當(dāng)對“成績”表進(jìn)行增刪改操作時,可以發(fā)現(xiàn)系統(tǒng)做出的反應(yīng)沒有什么變化。當(dāng)在“學(xué)生”表中修改了某個已選課學(xué)生的學(xué)號時,系統(tǒng)并沒有給出錯誤提示,而是將“成績”表中相關(guān)的學(xué)號一并修改,這就是所謂的“級聯(lián)更新”;當(dāng)在“學(xué)生”表中刪除了某個已選課學(xué)生的信息時,系統(tǒng)同樣沒有給出錯誤提示,而是將“成績”表中學(xué)號相同的記錄進(jìn)行同步刪除,這就是所謂的“級聯(lián)刪除”。
演示完成后,先請學(xué)生對可能破壞參照完整性的各種情況以及系統(tǒng)相應(yīng)的違約處理方法進(jìn)行歸納,然后再通過表格的形式將結(jié)果反饋給學(xué)生,如表1所示。
表1 可能破壞參照完整性的情況及違約處理[2]
[主表\從表\違約處理\可能破壞參照完整性\插入記錄\拒絕執(zhí)行\可能破壞參照完整性\修改外鍵值\拒絕執(zhí)行\刪除記錄\可能破壞參照完整性\拒絕執(zhí)行/級聯(lián)刪除\修改主鍵值\可能破壞參照完整性\拒絕執(zhí)行/級聯(lián)更新\]
為了與課堂教學(xué)內(nèi)容銜接,我校設(shè)置的實(shí)驗(yàn)內(nèi)容順序是先讓學(xué)生分別建立各個表的結(jié)構(gòu),緊接著錄入實(shí)驗(yàn)指導(dǎo)書上事先給定的大量數(shù)據(jù),然后再去建立表間關(guān)系。這種做法存在一個問題:如果學(xué)生錄入的數(shù)據(jù)有錯誤,違反了參照完整性規(guī)則的要求,在創(chuàng)建表間關(guān)系時就無法實(shí)施參照完整性,學(xué)生只有修改或刪除不符合要求的數(shù)據(jù),才能實(shí)施參照完整性。要讓學(xué)生從大量數(shù)據(jù)中找出不符合要求的數(shù)據(jù),是一個較為繁瑣的工作。針對這種情況,筆者認(rèn)為教師要明確告知學(xué)生正確的做法是先建立表間關(guān)系實(shí)施參照完整性,再去錄入數(shù)據(jù),這樣違反參照完整性規(guī)則的錯誤數(shù)據(jù)就無法保存在表中。
2.4 關(guān)系連接類型
在“編輯關(guān)系”對話框(如圖1所示)中單擊“聯(lián)接類型”按鈕,會彈出“聯(lián)接屬性”對話框,其中有三個單選按鈕,它們定義了表間關(guān)系的三種連接類型:內(nèi)連接、左外連接和右外連接(在Access數(shù)據(jù)庫中不支持全外連接)。在表對象中,我們無法向?qū)W生演示這三種連接類型處理數(shù)據(jù)的具體方法,因此筆者考慮新建一個多表查詢對象來進(jìn)行驗(yàn)證。
具體講授時,先使用查詢的設(shè)計(jì)視圖新建一個查詢,將“學(xué)生”表和“成績”表分別添加到查詢“設(shè)計(jì)視圖”窗口中,作為新建查詢的數(shù)據(jù)源。由于在前面已經(jīng)建立了表間關(guān)系,所以在查詢“設(shè)計(jì)視圖”窗口中會顯示出系統(tǒng)自動創(chuàng)建的表示表間關(guān)系的連線。在連線上單擊右鍵,會彈出一個快捷菜單,選擇其中的“聯(lián)接屬性”菜單項(xiàng),也可以調(diào)出其中的“聯(lián)接屬性”對話框(如圖2所示)。為了給隨后的提問做好鋪墊,筆者先讓學(xué)生分別查看一下“學(xué)生”表和“成績”表中的記錄數(shù)(假設(shè)這兩個表中都有10條記錄),然后從以下幾個方面進(jìn)行講授。
⑴ 通過設(shè)計(jì)好的查詢題目,導(dǎo)入內(nèi)連接和外連接知識點(diǎn)。
例如,給出查詢題目1:創(chuàng)建一個查詢,查找并顯示所有選課學(xué)生的“姓名”、“課程號”和“成績”三個字段的內(nèi)容。這個查詢需要通過內(nèi)連接來完成。由于建立表間關(guān)系后系統(tǒng)默認(rèn)的連接類型就是內(nèi)連接(即對話框中的第一個選項(xiàng)),因此學(xué)生不需要更改“聯(lián)接屬性”對話框中的連接類型,只要分別雙擊“學(xué)生”表和“成績”表中的“姓名”、“課程號”和“成績”三個字段,然后運(yùn)行查詢就可以得到所需要的查詢結(jié)果。
給出查詢題目2:創(chuàng)建一個查詢,查找并顯示所有學(xué)生的“姓名”、“課程號”和“成績”三個字段的內(nèi)容。由于這個查詢涉及到選課和沒選課的所有學(xué)生信息,如果不更改“聯(lián)接屬性”對話框中的連接類型,那查詢結(jié)果里面就不包括沒有選課的學(xué)生信息,顯然不合題意[3]。因此根據(jù)題目要求,這個查詢應(yīng)使用左外連接(應(yīng)選中對話框中的第二個選項(xiàng)),才能把選課和沒選課的所有學(xué)生的信息都查找出來。
⑵ 通過對不同查詢結(jié)果中記錄數(shù)目變化原因的提問,引發(fā)學(xué)生對連接類型知識點(diǎn)探究的興趣。
“學(xué)生”表和“成績”表中都有10條記錄,在前面內(nèi)連接的查詢結(jié)果中出現(xiàn)了10條記錄;將連接類型更改為左外連接,查詢結(jié)果中出現(xiàn)了14條記錄,相對內(nèi)連接多出了4條記錄,提問要求學(xué)生思考為什么多出了4條記錄;將連接類型再更改為右外連接(應(yīng)選中對話框中的第三個選項(xiàng)),查詢結(jié)果又變成了10條記錄,和內(nèi)連接完全一樣,提問并要求學(xué)生思考為什么在此處右外連接和內(nèi)連接的查詢結(jié)果會是一樣的;然后再將兩個表的表間關(guān)系連線刪除,這時發(fā)現(xiàn)查詢結(jié)果中有100條記錄,提問要求學(xué)生思考如何解釋查詢結(jié)果中會出現(xiàn)100條記錄。
⑶ 切換到查詢的“SQL視圖”,讓學(xué)生觀察系統(tǒng)自動生成的SQL語句有什么不同,以達(dá)到對前面所講知識點(diǎn)進(jìn)行佐證的目的。
對于內(nèi)連接,SQL語句指定的表示連接類型的關(guān)鍵字是“INNER JOIN”;對于左外連接,SQL語句指定的關(guān)鍵字是“LEFT JOIN”;對于右外連接,SQL語句指定的關(guān)鍵字是“RIGHT JOIN”。這三種連接類型的連接條件都是“學(xué)生.學(xué)號=成績.學(xué)號”。而如果刪除了兩個表的表間關(guān)系連線,在SQL語句中就看不到連接條件,說明如果沒有指定兩個表的連接條件,這時候兩個表進(jìn)行的就是笛卡爾積運(yùn)算。SQL語句中使用的關(guān)鍵字很多都是學(xué)生比較熟悉的英文單詞,因而在一定程度上可以強(qiáng)化學(xué)生對連接類型知識點(diǎn)的記憶。
3 結(jié)束語
教學(xué)有法,教無定法,追求教學(xué)得法。恰當(dāng)?shù)慕虒W(xué)方法,有利于提高學(xué)生學(xué)習(xí)的積極性,有利于學(xué)生對所學(xué)知識的掌握和運(yùn)用,有助于學(xué)生思維能力的培養(yǎng),有助于提高學(xué)習(xí)效率和課堂效率。教學(xué)實(shí)踐表明,對于建立表間關(guān)系這一重要知識點(diǎn)的教學(xué),采用上述教學(xué)方法是有效且得當(dāng)?shù)?,在較短的授課學(xué)時內(nèi),學(xué)生不僅能夠理解建立表間關(guān)系的相關(guān)知識,而且能熟練運(yùn)用這些知識去解決實(shí)際問題,確實(shí)達(dá)成了教學(xué)目標(biāo)和要求,取得了良好的教學(xué)效果。
參考文獻(xiàn):
[1] 孫寶林,崔洪芳.Access數(shù)據(jù)庫應(yīng)用技術(shù)[M].清華大學(xué)出版社,2010.
[2] 王珊,薩師煊.數(shù)據(jù)庫系統(tǒng)概論(第四版)[M].高等教育出版社,2006.
[3] 段玉春,朱長江.幾個ACCESS疑難問題的探析[J].電腦知識與技術(shù),2011.7(33):8113-8114