李愛軍
(天津?yàn)I海職業(yè)學(xué)院,天津 300450)
摘 要:本文主要從數(shù)據(jù)完整性、通過觸發(fā)器在后臺(tái)控制主表和子表間的數(shù)據(jù)同步更新、SQL語(yǔ)句的語(yǔ)法規(guī)則、查詢語(yǔ)句的細(xì)化、程序的嚴(yán)密性等五個(gè)方面,闡述在SQL Server 2000教學(xué)中突破瓶頸問題,以提高教學(xué)效果。
關(guān)鍵詞:SQL Server 2000數(shù)據(jù) 觸發(fā)器
《數(shù)據(jù)庫(kù)原理與應(yīng)用》是計(jì)算機(jī)專業(yè)的一門重要的職業(yè)核心技能課。目前,高校普通使用的是SQL Server 2000數(shù)據(jù)庫(kù)類教材,SQL Server 2000可實(shí)現(xiàn)網(wǎng)絡(luò)環(huán)境下的數(shù)據(jù)處理和信息管理。目前,SQL Server 2000已成為數(shù)據(jù)倉(cāng)庫(kù)、電子商務(wù)應(yīng)用程序及網(wǎng)站設(shè)計(jì)的優(yōu)秀數(shù)據(jù)庫(kù)平臺(tái),顯然,在高校的計(jì)算機(jī)專業(yè)開設(shè)SQL Server 2000是十分重要和必要的。
通過在教學(xué)中的探索,筆者體會(huì)到SQL Server 2000中有以下幾個(gè)難點(diǎn)和重點(diǎn)問題,對(duì)于這些問題的正確理解是掌握該課程的關(guān)鍵。
一、數(shù)據(jù)的完整性
數(shù)據(jù)完整性是指存儲(chǔ)在數(shù)據(jù)庫(kù)中數(shù)據(jù)的一致性和正確性,包括實(shí)體完整性、域完整性、引用完整性及用戶定義完整性。數(shù)據(jù)規(guī)劃的不完整是導(dǎo)致前臺(tái)操作和后臺(tái)數(shù)據(jù)出現(xiàn)漏洞的主要原因。
在教學(xué)中,筆者盡量通過與學(xué)生貼近的易于理解的實(shí)例說明數(shù)據(jù)完整性的重要性。比如,使用的樣例數(shù)據(jù)庫(kù)系統(tǒng)是學(xué)籍管理系統(tǒng)。在該系統(tǒng)中有多個(gè)與學(xué)生信息相關(guān)的數(shù)據(jù)庫(kù)表,其中,一個(gè)名稱為“學(xué)生”的表中含有學(xué)號(hào)、姓名、政治面貌等多個(gè)字段,而每個(gè)學(xué)生只有“學(xué)號(hào)”字段的值完全不可能出現(xiàn)重復(fù)值,故將“學(xué)號(hào)”字段設(shè)置為關(guān)鍵字,這樣可以確保實(shí)體完整性;而另一個(gè)名稱為“成績(jī)”的表中含有學(xué)號(hào)、課程代號(hào)、平時(shí)成績(jī)、期末成績(jī)等多個(gè)字段,設(shè)定平時(shí)成績(jī)、期末成績(jī)兩字段的取值范圍為0至100,以確保成績(jī)值合理來規(guī)約域完整性……這樣,由簡(jiǎn)至難引入通過數(shù)據(jù)類型、索引、各種約束、觸發(fā)器等來規(guī)約數(shù)據(jù)的完整性。
二、通過觸發(fā)器在后臺(tái)控制主表和子表間的數(shù)據(jù)同步更新
觸發(fā)器是一種特殊類型的存儲(chǔ)過程,當(dāng)有操作影響到觸發(fā)器保護(hù)的數(shù)據(jù)時(shí),觸發(fā)器會(huì)自動(dòng)發(fā)生。通過觸發(fā)器可以在后臺(tái)很好地控制相關(guān)表間數(shù)據(jù)的同步更新(包括添加、刪除、修改等操作)。但學(xué)生往往不能正確理解觸發(fā)器的設(shè)計(jì)規(guī)則及實(shí)現(xiàn)原理,致使在表間數(shù)據(jù)同步問題上不會(huì)巧妙地利用觸發(fā)器。
筆者采用三種方法解決了觸發(fā)器對(duì)大部分同學(xué)的困擾:一是將創(chuàng)建觸發(fā)器的語(yǔ)法格式分解成多個(gè)“子句”,通過逐層消化讓學(xué)生理解觸發(fā)器;二是引入inserted和deleted這兩個(gè)特殊的臨時(shí)表,通過講授這兩個(gè)表的生成時(shí)機(jī)、內(nèi)容來源來說明當(dāng)用戶對(duì)數(shù)據(jù)表做添加、刪除、修改等更新操作時(shí)數(shù)據(jù)的原型在inserted或deleted表存有臨時(shí)副本,利用inserted或deleted表的數(shù)據(jù)原型副本作條件即可同步更新相關(guān)子表的數(shù)據(jù);三是通過各種觸發(fā)器應(yīng)用實(shí)例讓學(xué)生從感性上理解觸發(fā)器的作用,從而達(dá)到正確使用觸發(fā)器的目的。
三、繁雜的語(yǔ)法規(guī)則
T-SQL語(yǔ)法規(guī)則繁雜,每個(gè)語(yǔ)句有眾多子句,而隨著課程進(jìn)度的發(fā)展,要掌握的語(yǔ)法規(guī)則越來越多,很多學(xué)生往往知難而退了,這正是初學(xué)者學(xué)習(xí)SQL Server 2000的瓶頸問題之一。在講課過程中筆者采用求共性、記重點(diǎn)、逐層消化的方法簡(jiǎn)化了該問題。
求共性是指隨著講課的深入,把不同語(yǔ)句中共性的關(guān)鍵字或子句及時(shí)的給學(xué)生總結(jié)并指點(diǎn)出來,讓學(xué)生在前面知識(shí)的基礎(chǔ)上記憶后面的內(nèi)容,強(qiáng)化記憶規(guī)則,減少記憶量。
記重點(diǎn)是指在掌握新內(nèi)容的初始階段只要求學(xué)生記憶并掌握語(yǔ)句的重點(diǎn)子句,其它子句允許學(xué)生查閱相關(guān)資料或聯(lián)機(jī)幫助,減少學(xué)生的課業(yè)負(fù)擔(dān),提高學(xué)生的學(xué)習(xí)興趣。
逐層消化是在求共性、記重點(diǎn)的基礎(chǔ)上完成的。包括兩方面的含義:一是指教師在講授內(nèi)容上要逐個(gè)子句的細(xì)化重點(diǎn)內(nèi)容;二是指大部分學(xué)生要逐漸脫離相關(guān)資料和聯(lián)機(jī)幫助,消化所學(xué)知識(shí)。
四、T-SQL中查詢語(yǔ)句的細(xì)化
檢索或稱查詢數(shù)據(jù)是數(shù)據(jù)庫(kù)系統(tǒng)中的一個(gè)重要內(nèi)容,同時(shí),查詢語(yǔ)句也是前臺(tái)應(yīng)用程序連接后臺(tái)數(shù)據(jù)的一個(gè)簡(jiǎn)潔的常用工具,在數(shù)據(jù)源中正確使用查詢語(yǔ)句的不同形式,可以巧妙地簡(jiǎn)化前臺(tái)的很多操作。為了使學(xué)生牢固掌握查詢語(yǔ)句,筆者采用層層細(xì)化的方法分別介紹查詢語(yǔ)句中的SELECT子句、COMPUTE BY子句等內(nèi)容,并結(jié)合由簡(jiǎn)至難的實(shí)例加深了學(xué)生對(duì)這部分內(nèi)容的理解,為實(shí)驗(yàn)教學(xué)中靈活使用后臺(tái)數(shù)據(jù)奠定了基礎(chǔ)。
五、程序的嚴(yán)密性
計(jì)算機(jī)專業(yè)的學(xué)生在學(xué)習(xí)SQL Server 2000之前已學(xué)習(xí)過多種高級(jí)語(yǔ)言,編程并不存在太大問題,但程序的嚴(yán)密性往往很差,包括教材中樣例程序也大多存在著漏洞。
在教學(xué)中,筆者從以前學(xué)生設(shè)計(jì)的程序入手,先找漏洞,讓學(xué)生實(shí)際感受到程序設(shè)計(jì)中存在的問題,然后以模塊的方式規(guī)范學(xué)生的編程風(fēng)格。比如,在前臺(tái)的添加數(shù)據(jù)模塊中,要求學(xué)生在程序中必須依次考慮:各數(shù)據(jù)列是否允許為空、數(shù)據(jù)的類型或格式是否正確、是否關(guān)鍵字列或列集、是否需要手動(dòng)寫入后臺(tái)數(shù)據(jù)庫(kù)表。把這四部分通過前臺(tái)對(duì)象的事件過程依次完成,然后調(diào)試運(yùn)行,通過查看后臺(tái)數(shù)據(jù)庫(kù)表的同步變化,體會(huì)如何通過前臺(tái)規(guī)約后臺(tái)數(shù)據(jù)的完整性。通過這種方式,學(xué)生提高了分析問題、完善解決問題的能力。
經(jīng)教學(xué)實(shí)踐證明,這種重點(diǎn)突破瓶頸問題的教學(xué)方式是行之有效的,大部分同學(xué)都對(duì)后臺(tái)數(shù)據(jù)規(guī)劃及前臺(tái)程序有了一定的認(rèn)識(shí),并且,幾乎每個(gè)教學(xué)班都會(huì)有幾名學(xué)生在教師的指導(dǎo)下設(shè)計(jì)出優(yōu)秀的小型數(shù)據(jù)庫(kù)信息系統(tǒng),明顯提高了教學(xué)效果。