李艷玲
(長治學院 計算機系,山西 長治 046011)
“Access”是一門實踐性很強的計算機課程,是國內多數高校非計算機專業的公共基礎課,也是全國計算機等級考試的科目之一,相當一部分學生們有濃厚的學習愿望[1]。如何設計新型實驗模式,培養學生的學習興趣是值得思索的問題。
在長治學院理科類非計算機專業的Access教學中,我們嘗試一系列改革,引入了新的實驗設計案例,提高學生的動手能力和分析問題的能力,提升學生的自信心和成就感。
根據瑞士心理學家皮亞杰認知發展理論的教學觀,錯誤是有意義的學習所必需的。在Access教學過程中,運行有錯誤的實例,提出“為什么?”,然后解決問題,告訴學生“不能這樣做”[2]。反面案例的設置幫助學生積累經驗教訓,加深印象,做實驗時少走彎路,從而起到事半功倍的效果。
講解參照完整性與表之間的關聯時,巧妙運用反例提高學生解決問題的能力。實際上數據庫中的每個表之間是相互獨立存在的。只有通過某些字段,才能在表與表之間建立關系,參照完整性則是數據表之間聯系的規則。Access使用參照完整性確保相關表中記錄之間關系的有效性,防止意外刪除或更改相關數據。筆者通過學生管理數據庫講授參照完整性包括的兩方面內容:
(1)子表中不能增加主表里沒有的記錄。
即成績表中不能出現學生表里沒有的學生,教學中可以設置反例說明該規則。在學生表和成績表之間建立一對多的關系,“學生”表的學號字段已設置為主鍵。我們在成績表中輸入一條記錄:“07403202,04,99,T03”,該學生信息在作為主表的學生中不存在,表內容如圖1所示。

圖1 學生表和成績表內容
當我們實施學生表和成績表的參照完整性約束時,系統提示不能實施參照完整性,如圖2所示。此時,教師啟發學生思考:第一,參照完整性約束規則對父表和子表的要求是什么?讓學生理解父表中沒有的記錄,子表是不能添加的,也就是兩個表中不能出現“學號”不相等的記錄。第二,哪條記錄不符合參照完整性約束?通過引導,多數學生能找出學號為“07403202”的學生記錄在父表中是不存在的。第三,如何解決才能正確建立這個關系?當然是在“學生表”中增加或者在“成績表”中刪除或修改該記錄。

圖2 不能實施參照完整性反例
(2)父表中不能刪除建立了參照完整性的子表內容。
我們已正確建立“學生表”和“成績表”的參照完整性規則,教學中設計的反例是刪除學生表中“07403201,白華,女,英語0702,陜西,團員,1996/4/16”的記錄。系統提示不能“刪除或改變該記錄”,如圖3所示。原因是“成績表”中包含了“學生表”的相關記錄,不能刪除或更改。然后引導學生通過勾選“級聯刪除”解決問題,當選中“級聯刪除復選框”時,刪除父表中的記錄,Access將自動刪除相關表的相關記錄。最后再引出對于另一個復選框“級聯更新”的講解,加深學生對“參照完整性”、“級聯更新”和“級聯刪除”的理解和認識。

圖3 不能刪除記錄反例
數據查詢是數據庫的核心操作,SQL語言提供了SELECT語句進行數據查詢,該語句是SQL語言的核心,功能強、變化形式多[3]。SQL可以通過合計函數進行分組計算查詢,我們可以從學生、成績兩個表中查詢每個學生的學號、姓名和總分信息。學生可以很容易說出相應的SQL語句:SELECT學生.學號,姓名,sum(成績)AS總分FROM學生 INNER JOIN成績 ON學生.學號=成績.學號 GROUP BY學生.學號。但是,系統提示"查詢中不包含作為合計函數一部分的特定表達式'姓名'"。在出現警告信息后,引導學生觀察哪里出現錯誤了,應該怎樣改正。
接下來教師可以重新強調一下分組查詢要注意的地方,當我們采用GROUP BY短語按某字段進行分組查詢時,輸出選項中除了可以包含分組字段外,其他輸出選項必須是合計函數或含有合計函數的計算字段。學生就會理解SELECT后的'姓名'既不是分組字段,也沒有包含合計函數,所以會出錯。最后啟發學生輸出選項中的姓名換為合計函數FIRST(姓名)AS姓名或者按學號姓名分組,將其改為:GROUP BY 學生,學號,姓名。
表達式的應用是學習Access過程中的一個難點。它不僅用于查詢和篩選準則,還用于有效性規則以及其他計算,由字段名、常量、運算符和函數按規則組合而成,以產生某種運算結果。盡管在所有的教材中,對表達式的描述篇幅都不長,但是表達式的應用貫穿于整個Access的學習過程,學好它是掌握Access知識的關鍵。
而傳統的教學方法對學生完成“表達式實驗”并不理想,抽象的常量、函數、運算符等運算對象的講解不夠直觀,學生感覺枯燥,影響教學效果。我們把表達式的講授安排在SQL部分,化抽象為形象,提高學生的實驗興趣,實踐證實這是一種高效的學習方式。
在Access中,可以應用SQL語句來實現數據的查詢與管理。建立表結構語句是CREAT TABLE,SQL數據查詢可以通過SELECT語句實現。SELECT語句中包含的子句很多,其語句格式為:Select<輸出選項>From<數據來源表>[Where<篩選條件>][Group by<分組項目>[having<分組篩選條件>]][Order by<排序項目>]。我們在練習表達式時將其簡化為Select<表達式>[From<表名>]。當表達式與表記錄無關時,省略方括號中的缺省項。我們可以用如圖4所示實例說明各種不同數據類型,利用SELECT語句直觀形象,對結果的顯示也是一目了然。同樣的方法可以運用在學生練習數學表達式中,通過SQL求解一元二次方程的根。首先創建“abc”表,其中包括a,b,c三個字段,均為雙精度float類型,表結構如圖5所示。此時的表達式與表相關,用“SELECT-FROM”結構顯示所有方程的根,如圖5所示。

圖4 數據類型實例

圖5 求解方程實根
通過新方法的嘗試,筆乾在指導學生實驗的過程中,明顯感覺到學生的錯誤減少了,在面對問題時可以自己動手解決,并能拓寬所學的知識面。結果表明,上機時很少有學生出現玩游戲、看視頻等行為,所以科學設置實驗方案,能極大地激發學生的學習興趣,將學生引導到正確的軌道[4][5]。
[1]高翔.任務驅動法在“Access 數據庫技術”教學中的實踐[J].計算機教育,2009,(23):139-141.
[2]從反面案例談學生解決問題能力的培養-以程序設計基礎Access課程為例[J].計算機教育,2013,12(22):12-15.
[3]馬桂芳等.數據庫技術及應用(Access)[M].北京:人民郵電出版社,2013.
[4]萬華,常珊,涂淑琴.數據庫“Access”實驗教學改革與實踐[J].中國電力教育,2013,(31):145-147.
[5]劉義良.計算機實驗教學課堂行為管理的實踐及應用[J].實驗室研究與探索,2011,30(20):170-172.