李明勇,游應(yīng)德
(宜賓學(xué)院 計(jì)算機(jī)與信息工程學(xué)院,四川 宜賓 644007)
21 世紀(jì)是信息時(shí)代,各個(gè)行業(yè)存在大量的數(shù)據(jù),但需要信息化才能體現(xiàn)數(shù)據(jù)價(jià)值,信息化的技術(shù)支撐是數(shù)據(jù)庫應(yīng)用技術(shù),普通高等學(xué)校人才培養(yǎng)目標(biāo)是創(chuàng)新型應(yīng)用人才。在計(jì)算機(jī)學(xué)科的專業(yè)中,核心課程數(shù)據(jù)庫原理及應(yīng)用的內(nèi)容包含數(shù)據(jù)庫應(yīng)用技術(shù),它具有自然科學(xué)和工程技術(shù)屬性,如何挖掘該課程的創(chuàng)新因素,培養(yǎng)學(xué)生的創(chuàng)新能力,達(dá)到高等學(xué)校人才培養(yǎng)要求和符合時(shí)代需要的數(shù)據(jù)庫應(yīng)用技術(shù)人才,是教育者需要思考的課題。
該課程的內(nèi)涵可概括為將數(shù)據(jù)庫原理結(jié)合到DBMS 中進(jìn)行有效的應(yīng)用數(shù)據(jù)庫設(shè)計(jì),并對(duì)已經(jīng)完成的應(yīng)用數(shù)據(jù)庫進(jìn)行訪問,因此該課程內(nèi)容有關(guān)系數(shù)據(jù)庫理論、數(shù)據(jù)庫設(shè)計(jì)、DBMS操作平臺(tái)、數(shù)據(jù)保護(hù)策略、SQL 等。
創(chuàng)新包括基礎(chǔ)創(chuàng)新和應(yīng)用創(chuàng)新,其中應(yīng)用創(chuàng)新是學(xué)生在明確的實(shí)驗(yàn)平臺(tái)前提下,沿著清晰的技術(shù)路線進(jìn)行特定的工程實(shí)踐活動(dòng)[1],在本課程中,主要培養(yǎng)學(xué)生應(yīng)用創(chuàng)新思維和能力,如用SQL 解決實(shí)際問題、應(yīng)用數(shù)據(jù)庫的設(shè)計(jì)等。
創(chuàng)新因素應(yīng)在課程內(nèi)容中進(jìn)行充分挖掘,創(chuàng)新因素基本結(jié)構(gòu)如圖1 所示。
圖1 創(chuàng)新因素結(jié)構(gòu)
SQL 對(duì)數(shù)據(jù)庫定義、訪問、控制的核心地位是無法撼動(dòng)的,SQL 是非過程化語言,語法簡(jiǎn)潔。計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)學(xué)生必須牢固掌握SQL,通過學(xué)習(xí),培養(yǎng)學(xué)生邏輯(程序)思維能力和應(yīng)用創(chuàng)新能力,在教學(xué)過程中,如何培養(yǎng)學(xué)生應(yīng)用創(chuàng)新能力,有以下方面。
1)代碼編寫規(guī)范與創(chuàng)新。
一個(gè)問題對(duì)應(yīng)SQL 代碼并不多,但需要注意代碼的書寫格式,如開始處的注釋要完整和詳細(xì),雖然SQL 不區(qū)分大小寫,但SQL 命令動(dòng)詞應(yīng)盡量大寫,其他標(biāo)識(shí)符應(yīng)遵守Pascal 或Camel命名規(guī)則,兩個(gè)SQL 語句之間有空行,SQL 有嵌套時(shí)寫成向右遞縮形式等,DBMS 的代碼編輯器有代碼編寫規(guī)范輔助功能,讓學(xué)生了解并自覺使用。
學(xué)生在學(xué)習(xí)各種計(jì)算機(jī)語言時(shí),SQL 的學(xué)習(xí)較早,應(yīng)養(yǎng)成良好的代碼書寫習(xí)慣。習(xí)慣的養(yǎng)成越早越好,它是創(chuàng)新的基礎(chǔ),隨意書寫代碼不是創(chuàng)新。
2)基本思維與創(chuàng)新。
雖然SQL 是非過程化語言,但并不意味著用SQL 求解問題時(shí)不考慮問題處理的細(xì)節(jié),相反,還應(yīng)該對(duì)問題的處理細(xì)節(jié)作深入分析,有助于編寫正確的SQL。
在學(xué)習(xí)SQL 之前,應(yīng)有充分知識(shí)準(zhǔn)備處理問題的細(xì)節(jié),這就是關(guān)系代數(shù)知識(shí)的學(xué)習(xí),尤其關(guān)系代數(shù)中的專門運(yùn)算:選擇、投影和除運(yùn)算,其中除運(yùn)算的學(xué)習(xí)是一個(gè)難點(diǎn),在開始學(xué)習(xí)中應(yīng)注意它與集合包含的關(guān)系,通過“查詢學(xué)習(xí)了所有課程的學(xué)生”等問題讓學(xué)生了解除運(yùn)算的作用,激發(fā)學(xué)生的學(xué)習(xí)興趣,在學(xué)習(xí)SQL 中,遇到邏輯蘊(yùn)涵時(shí),就能理解求解過程的邏輯,從而寫出正確的SQL 代碼。
基本思維就是對(duì)問題的分析過程和處理過程,其中處理過程要細(xì)化到程序級(jí),SQL 僅表現(xiàn)結(jié)果,但通過結(jié)果分析處理細(xì)節(jié),不斷培養(yǎng)逆向思維。
3)結(jié)構(gòu)化思維與創(chuàng)新。
SQL 是結(jié)構(gòu)化查詢語言,很多復(fù)雜查詢都要用到嵌套查詢,例如,求解“查詢選修課程數(shù)最多的學(xué)生”時(shí),首先查詢每位學(xué)生的選修課程數(shù)(作為子查詢),再找出選修課程數(shù)最多的學(xué)生(作為父查詢),子查詢要完整地嵌套在父查詢中,怎么嵌套值得研究,其中要有分組的思路。
把問題結(jié)構(gòu)化是一種求解思路,像上述問題,先考慮宏觀的查詢(編寫父查詢SQL),再考慮細(xì)節(jié)(父查詢的條件設(shè)置)。
在學(xué)生學(xué)習(xí)嵌套查詢時(shí),要從簡(jiǎn)單的問題求解開始,有意識(shí)地向嵌套求解方向引導(dǎo),逐步培養(yǎng)學(xué)生結(jié)構(gòu)化思維,用結(jié)構(gòu)化思維解決新問題。
4)用分類、歸納、聯(lián)想的思維方式學(xué)習(xí)SQL。
數(shù)據(jù)訪問可分為查詢與更新兩類,對(duì)應(yīng)的SQL 命令也不多,但查詢的問題五花八門,這需要將問題分類、歸納,從過程中找出求解規(guī)律和新的方法。
例如,以上兩問題“查詢學(xué)習(xí)了所有課程的學(xué)生”“查詢選修課程數(shù)最多的學(xué)生”,兩者之間是否有關(guān)聯(lián),仔細(xì)分析后發(fā)現(xiàn),前者用邏輯蘊(yùn)涵求解,后者用嵌套方式求解,但后者是前者的一般情形,后者的求解思路可用于前者,就會(huì)發(fā)現(xiàn)前者有一個(gè)嵌套求解新方法,甚至可以聯(lián)想到除法運(yùn)算,思考它的復(fù)合過程。
SQL 的學(xué)習(xí)可延伸在課外,給學(xué)生大量的SQL 習(xí)題,這些習(xí)題的涉及范圍是學(xué)生相對(duì)熟悉的,例如,學(xué)分統(tǒng)計(jì)計(jì)算查詢、課程成績(jī)、操行分排名等。
應(yīng)用數(shù)據(jù)庫設(shè)計(jì)是本課程應(yīng)用核心,其目標(biāo)就是設(shè)計(jì)高質(zhì)量的應(yīng)用數(shù)據(jù)庫,在設(shè)計(jì)的步驟中,最重要的三大步驟是分析用戶的數(shù)據(jù)需求、設(shè)計(jì)數(shù)據(jù)模型、轉(zhuǎn)換數(shù)據(jù)模型。分析用戶需求是學(xué)生難以掌握,需要在后續(xù)課程(軟件工程)中反復(fù)錘煉才能掌握;設(shè)計(jì)數(shù)據(jù)模型也是有一定難度,一般情況下,模型的形式是E-R 模型(實(shí)體—關(guān)系圖),實(shí)體是通過不同抽象方法在用戶提供的用戶需求中分離出數(shù)據(jù)需求后,進(jìn)行必要的分析才可能得到,實(shí)體之間的聯(lián)系及其類型需要反復(fù)論證才能確認(rèn),而且設(shè)計(jì)數(shù)據(jù)模型需要經(jīng)過分E-R 圖到集成E-R 圖過程,其中還要消除各種類型的沖突;轉(zhuǎn)換數(shù)據(jù)模型一般將E-R 圖轉(zhuǎn)換成關(guān)系模型,在這一過程中,將實(shí)體與聯(lián)系按照轉(zhuǎn)換規(guī)則進(jìn)行轉(zhuǎn)換,尤其聯(lián)系的轉(zhuǎn)換,聯(lián)系的類型不同,轉(zhuǎn)換方式不同。
綜上所述,以上三大步驟的難度依次遞減,從學(xué)生能力角度來看,能夠掌握的步驟是轉(zhuǎn)換數(shù)據(jù)模型,但在教學(xué)過程中發(fā)現(xiàn)學(xué)生往往是憑感覺得到關(guān)系模式,而不是根據(jù)E-R 圖轉(zhuǎn)換成關(guān)系模式,造成這一現(xiàn)象的原因主要有三點(diǎn):一是學(xué)生要解決的數(shù)據(jù)庫設(shè)計(jì)問題相對(duì)簡(jiǎn)單,可以憑感覺做,但這樣做會(huì)丟失數(shù)據(jù)庫中數(shù)據(jù)或達(dá)不到功能要求;二是學(xué)生無法理解E-R 圖與關(guān)系模式之間的對(duì)應(yīng)關(guān)系,即使理解了,將E-R 圖轉(zhuǎn)換成關(guān)系模式也有一定困難;三是很難建立準(zhǔn)確的E-R圖,跳過E-R 圖,直接得到關(guān)系模式。
在教學(xué)過程中,用案例驅(qū)動(dòng)法分層次進(jìn)行教學(xué),以學(xué)生相對(duì)較熟悉的應(yīng)用系統(tǒng)為例,例如學(xué)生信息系統(tǒng)、選課系統(tǒng)、考試系統(tǒng)、圖書管理系統(tǒng)、工資管理系統(tǒng)、物資管理系統(tǒng),甚至是其中的一個(gè)子系統(tǒng),分析其中存在的若干實(shí)體及其聯(lián)系,建立相應(yīng)的概念模型E-R 圖。然后再給學(xué)生相對(duì)不熟悉的案例,引導(dǎo)分析其中可能存在的實(shí)體和聯(lián)系,試圖建立概念模型。在實(shí)踐過程中,可以將學(xué)生分成若干小組進(jìn)行項(xiàng)目設(shè)計(jì),每一個(gè)小組做一個(gè)相對(duì)真實(shí)的項(xiàng)目,教師可提供必要的文檔或需求分析。在此基礎(chǔ)上,要求學(xué)生建立E-R數(shù)據(jù)模型,總之幫助學(xué)生建立先有E-R 數(shù)據(jù)模型,再有關(guān)系模型的邏輯思維,摒棄憑感覺做的陋習(xí),養(yǎng)成嚴(yán)謹(jǐn)做事習(xí)慣,從而建立創(chuàng)新思維。
DBMS 操作平臺(tái)中可以建立應(yīng)用數(shù)據(jù)庫,但會(huì)給學(xué)生帶來一個(gè)錯(cuò)誤觀念,以為在其中能完成應(yīng)用數(shù)據(jù)庫設(shè)計(jì),殊不知,那只是應(yīng)用數(shù)據(jù)庫設(shè)計(jì)的最后操作步驟。另外,在DBMS 中做實(shí)驗(yàn),確實(shí)需要先建立一個(gè)應(yīng)用數(shù)據(jù)庫,這就進(jìn)一步加深了學(xué)生的錯(cuò)誤觀念。為了糾正學(xué)生的錯(cuò)誤,在教學(xué)過程中,我們運(yùn)用CDIO 教學(xué)法。學(xué)生在學(xué)習(xí)數(shù)據(jù)庫設(shè)計(jì)的基本知識(shí)時(shí)應(yīng)注意,關(guān)系模式(表)來源于現(xiàn)實(shí)的實(shí)體,實(shí)體之間的聯(lián)系,除了實(shí)體有屬性外,聯(lián)系也有屬性,例如,數(shù)據(jù)項(xiàng)“成績(jī)”既不是學(xué)生實(shí)體的屬性,也不是課程實(shí)體的屬性,而是兩者之間聯(lián)系的屬性。在實(shí)驗(yàn)后續(xù)階段,學(xué)生分小組做應(yīng)用數(shù)據(jù)庫設(shè)計(jì)實(shí)驗(yàn),才能弄清數(shù)據(jù)庫設(shè)計(jì)的方法、步驟,這是一個(gè)倒置的學(xué)習(xí)過程,但要建立正確的數(shù)據(jù)庫設(shè)計(jì)思想,為將來應(yīng)用數(shù)據(jù)庫設(shè)計(jì)奠定基礎(chǔ)。
本課程的概念非常多,有些概念要進(jìn)行實(shí)驗(yàn)才能理解掌握,如“外碼”就是對(duì)關(guān)系模式之間數(shù)據(jù)進(jìn)行規(guī)范,首先應(yīng)該使學(xué)生理解外碼的現(xiàn)實(shí)意義,再說明外碼概念,參照完整性概念。最后讓學(xué)生進(jìn)入實(shí)驗(yàn)室,定義外碼,準(zhǔn)備好數(shù)據(jù),當(dāng)出現(xiàn)違反參照完整性時(shí),觀察數(shù)據(jù)管理系統(tǒng)的反映,從而進(jìn)一步理解外碼的作用,防止錯(cuò)誤和無效數(shù)據(jù)進(jìn)入數(shù)據(jù)庫,始終使數(shù)據(jù)處于正確、有效、相容狀態(tài)[2]。
關(guān)系數(shù)據(jù)庫理論的應(yīng)用之一是評(píng)價(jià)應(yīng)用數(shù)據(jù)庫的質(zhì)量,尤其對(duì)數(shù)據(jù)的更新異常進(jìn)行評(píng)價(jià),這涉及關(guān)系模式的范式級(jí)別,尤其第三范式。學(xué)生學(xué)習(xí)范式過程中,應(yīng)該從一個(gè)相對(duì)熟悉的實(shí)例開始,從中觀察存在的各種異?,F(xiàn)象,分析產(chǎn)生這些現(xiàn)象的原因是存在不合理的數(shù)據(jù)依賴,指出第一范式存在問題,從而自然地提高范式級(jí)別到第二范式,直到第三范式。在學(xué)習(xí)過程中,一定要讓學(xué)生充分理解完全函數(shù)依賴和傳遞函數(shù)依賴等概念及之間的關(guān)系,可以從第三范式的概念出發(fā),證明一個(gè)關(guān)系模式如果是第三范式,則一定是第二范式,進(jìn)一步理解兩者之間的關(guān)系,也可培養(yǎng)學(xué)生嚴(yán)密的推理思維。最后指出第三范式并不是徹底消除了各種異?,F(xiàn)象,但使異?,F(xiàn)象的嚴(yán)重程度大大降低。
使應(yīng)用數(shù)據(jù)庫達(dá)到第三范式是數(shù)據(jù)庫質(zhì)量的一個(gè)基本指標(biāo),意味著要消除數(shù)據(jù)庫中存在的第一范式和第二范式,消除的方法主要是分解方法。對(duì)關(guān)系模式的分解要用到保持函數(shù)依賴和無損連接,要正確地分解關(guān)系模式,多數(shù)學(xué)生做不到,但應(yīng)能判斷關(guān)系模式達(dá)到第幾范式。
關(guān)系數(shù)據(jù)庫理論教學(xué)的一個(gè)內(nèi)容就是證明Armstrong 公理系統(tǒng)的有效性和完備性,雖然它是模式分解算法的理論基礎(chǔ),但在學(xué)生學(xué)習(xí)過程中,能培養(yǎng)嚴(yán)謹(jǐn)?shù)耐评硭季S和抽象思維。還能得到一些非常有用的結(jié)果:屬性集閉包算法,該算法可以讓學(xué)生編寫程序?qū)崿F(xiàn),這是一個(gè)創(chuàng)新內(nèi)容。
在本課程中,基本概念很多,學(xué)生對(duì)這些概念的理解有困難,應(yīng)在后續(xù)學(xué)習(xí)中反復(fù)領(lǐng)悟,分散學(xué)習(xí)。在學(xué)習(xí)數(shù)據(jù)庫原理中,有一些基本概念,例如以函數(shù)依賴為中心的各種依賴,適時(shí)提出超出函數(shù)依賴范疇的連接依賴或理想的范式級(jí)別,引導(dǎo)學(xué)生在基礎(chǔ)理論領(lǐng)域有新的發(fā)現(xiàn)培養(yǎng)學(xué)生基礎(chǔ)創(chuàng)新意識(shí)和能力;可以對(duì)概念進(jìn)行分層次學(xué)習(xí),培養(yǎng)學(xué)生應(yīng)用創(chuàng)新能力。例如,候選碼這個(gè)概念就是其中的典型代表,為了便于理解,第一層次是:能唯一標(biāo)識(shí)實(shí)體的屬性集稱為候選碼,該描述淺顯易懂,但不準(zhǔn)確;教學(xué)時(shí)應(yīng)舉例說明不準(zhǔn)確,并引導(dǎo)學(xué)生分析為什么不準(zhǔn)確。第二層次:設(shè)K 為關(guān)系模式R中的屬性集,若屬性全集完全函數(shù)依賴于K,則K 為R 的候選碼[1],該描述是準(zhǔn)確的,但比較難懂,涉及函數(shù)依賴等概念,但一定要讓學(xué)生理解掌握,并能用屬性集閉包算法證明一個(gè)屬性集為關(guān)系模式的候選碼,有了這些基本知識(shí)后,給出一個(gè)問題,如何進(jìn)行程序設(shè)計(jì),找到復(fù)雜關(guān)系模式的全部候選碼。
在新時(shí)代新工科大背景下,“數(shù)據(jù)庫原理及應(yīng)用”如何培養(yǎng)學(xué)生創(chuàng)新能力是值得研究的課題,教師教什么、怎么教,學(xué)生學(xué)什么、怎么學(xué)等問題,一定要圍繞學(xué)生的學(xué)為中心進(jìn)行,要注重培養(yǎng)學(xué)生的創(chuàng)新意識(shí)和創(chuàng)新能力。
如前所述,課程中對(duì)很多基本概念、基本知識(shí)要進(jìn)行取舍,分層次進(jìn)行教學(xué)和學(xué)習(xí),例如,圍繞以關(guān)系模式R(U,F(xiàn))為中心的概念教學(xué)模式,舍棄數(shù)據(jù)庫技術(shù)的發(fā)展史中涉及的概念等,培養(yǎng)學(xué)生的抽象思維;以SQL 為中心的學(xué)習(xí)模式,但要保留關(guān)系代數(shù),有利于培養(yǎng)學(xué)生計(jì)算和邏輯思維;在DBMS 環(huán)境中,采用CDIO 方式學(xué)習(xí)數(shù)據(jù)庫的保護(hù)策略,而不是單純介紹基本知識(shí);以第三范式為中心學(xué)習(xí)關(guān)系數(shù)據(jù)庫理論,培養(yǎng)學(xué)生嚴(yán)密的推理能力和學(xué)習(xí)興趣;讓學(xué)生熟練掌握一個(gè)DBMS 操作,提高學(xué)生對(duì)數(shù)據(jù)庫的操作能力;分小組完成一個(gè)應(yīng)用數(shù)據(jù)庫設(shè)計(jì),重點(diǎn)掌握從概念模型設(shè)計(jì)到邏輯結(jié)構(gòu)的轉(zhuǎn)換方法,培養(yǎng)學(xué)生應(yīng)用創(chuàng)新能力與合作能力;可以將DBMS 中的并和數(shù)據(jù)恢復(fù)作為選學(xué)內(nèi)容。
為了有利于開展教學(xué),充分利用網(wǎng)絡(luò),進(jìn)行線上線下教學(xué)模式。線上,精心編寫用于檢驗(yàn)基本知識(shí)、基本概念的考試試題庫,學(xué)生在線上完成答題,并可以多次重復(fù)做,直到達(dá)到優(yōu)秀等級(jí);將要完成學(xué)習(xí)時(shí),準(zhǔn)備好大量的綜合試題庫,以“一人一題”方式進(jìn)行上機(jī)考試,這樣,可以培養(yǎng)學(xué)生獨(dú)立思考能力。線下,精心準(zhǔn)備上課內(nèi)容,以培養(yǎng)學(xué)生思維為向?qū)?,引?dǎo)學(xué)生思考學(xué)習(xí)內(nèi)容,拓展思考空間,以問題為向?qū)?,最大限度地培養(yǎng)學(xué)生分析問題和解決問題的能力;在實(shí)驗(yàn)室中示范解決問題的細(xì)節(jié)過程,先讓學(xué)生在實(shí)驗(yàn)環(huán)境中學(xué)會(huì)模仿,逐步形成思維模式,形成發(fā)現(xiàn)新問題和解決新問題的能力。
由于“數(shù)據(jù)庫原理及應(yīng)用”開設(shè)學(xué)期較早,我們從該課程中挖掘創(chuàng)新因素,在后續(xù)課程中力求做到創(chuàng)新因素的挖掘,培養(yǎng)學(xué)生創(chuàng)新思維和創(chuàng)新能力,將這些看似碎片化創(chuàng)新因素組成有機(jī)整體,最終形成學(xué)生專業(yè)核心能力。