李德勝
(安徽科技學院 信息與網(wǎng)絡工程學院,安徽 鳳陽 233100)
MySQL數(shù)據(jù)庫課程教學難點教學分析
——以數(shù)據(jù)庫設計為例
李德勝
(安徽科技學院 信息與網(wǎng)絡工程學院,安徽 鳳陽 233100)
近年來,由于MySQL的體積小、功能全和免費的特點,加上PHP+MySQL的Web開發(fā)架構的興起,MySQL已經(jīng)成為了計算機、軟件工程等專業(yè)中承接“數(shù)據(jù)庫系統(tǒng)原理”和“PHP Web開發(fā)”的重要專業(yè)課程之一。然而,作為一門新興的專業(yè)課程,其課程、教材、資源、教學研究都還不夠充分。尤其是課程中學生容易混淆的一些教學難點,不僅使學生感到嚴重的挫敗感,而且影響了后續(xù)數(shù)據(jù)庫的進一步應用。本文結合Web開發(fā)應用,對MySQL中的一些教學難點進行分析,并提出一些教學實踐改革方法,擬形成一些最佳實踐的教學方法。
存儲引擎;環(huán)境配置;范式;數(shù)據(jù)庫設計;字符集;校對規(guī)則
MySQL是一款優(yōu)秀的DBMS軟件,是目前事實上的小型關系型數(shù)據(jù)庫范例之一。與其他關系型數(shù)據(jù)庫(Oracle、DB2、SQLServer、SQLite等)相比,它具有體積小、功能全、查詢快捷、完全免費等特點,加上目前廣泛流行的PHP+SQL Web開發(fā)架構,使得MySQL數(shù)據(jù)庫課程[1]逐漸走向了計算機科學與技術、網(wǎng)絡工程等專業(yè)的課堂,成為了承接“數(shù)據(jù)庫系統(tǒng)原理”[2]和“PHP Web開發(fā)”[3]的重要專業(yè)課程。
然而,作為一門新興的專業(yè)課程,其課程、教材、資源、教學研究都還不夠充分,尤其是課程中學生容易混淆的一些難點,不僅使學生感到嚴重的挫敗感,而且影響了后續(xù)數(shù)據(jù)庫的進一步應用和后續(xù)Web開發(fā)課程的教學。
下面就MySQL數(shù)據(jù)庫課程教學難點展開分析,并提出相關對策。
MySQL的配置相對于其他工具來說并不算特別復雜,但是對于剛剛接觸它的同學來說,也是一個比較繁瑣的事情,而且容易導致數(shù)據(jù)庫服務啟動失敗。它的配置涉及到安裝版和復制版,普通版和服務器版等不同版本,其主要配置文件是mysql.ini(Linux系統(tǒng)下是mysql.cnf),分為兩塊:客戶端區(qū)配置和服務器區(qū)配置。當mysql服務器啟動時會讀取該文件來設置相關的運行參數(shù)。
在PHP+MySQL的Web開發(fā)體系架構中,MySQL對于性能的影響所占比例最大。MySQL的設置是否合理正確和最優(yōu)化,直接影響到Web應用的運行狀態(tài)、速度和吞吐量。另一方面,MySQL也是優(yōu)化難度最大的一個部分,不僅需要深入理解MySQL的原理,同時一定的經(jīng)驗判斷,才能夠設置好合理的參數(shù)。
在實際的教學過程中,對于初次接觸MySQL的學生來說,這部分內(nèi)容不僅失敗率高,影響學生的自信心,而且會拖延教學實踐的進度。因此,我們在實際的教學過程中采用了PhpStudy集成環(huán)境,它很好地集成了MySQL、PHP、Apache、IIS、Nginx,是真正的一站式開發(fā)環(huán)境。其中,關于MySQL,不僅包括了強大的客戶端工具,基于桌面的MySQL-Front與基于Web的phpMyAdmin,而且提供了MySQL配置工具(如圖1所示),可以輕松設置密碼、執(zhí)行MySQL命令、備份還原數(shù)據(jù)庫和設置參數(shù)值。
圖1 PhpStudy集成環(huán)境中的MySQL工具
MySQL的優(yōu)點之一就在于可以根據(jù)需要選擇多種存儲引擎,它支持MyISAM、InnoDB、HEAP、BOB、ARCHIVE、CSV等多種存儲引擎。其中在Web 應用開發(fā)中最常用的就是MyISAM和InnoDB兩種引擎。MyISAM引擎下的數(shù)據(jù)表的優(yōu)點是存取速度快、技術成熟、穩(wěn)定和方便管理,缺點是而容易造成碎片,事務支持差。而InnoDB的優(yōu)點是功能豐富、事務支持好、安全性高,缺點是讀寫速度稍慢、空間占用大。
基于這些特點,對于大多數(shù)學生來講,該如何選擇這兩種引擎,成為了教學中的一個難點。在實際教學中,應該讓學生掌握選擇的原則和參考標準。具體選擇的原則可以從范式約束、時空、事務和鎖、并發(fā)性、安全性和可移植性等方面考慮。一般來說,從可以方便移植、節(jié)約空間和時間的方式來講,并且不涉及多表的外鍵操作或事務處理,就應該選擇MyISAM類型。例如,在線文檔、網(wǎng)址收藏等Web應用,就比較適合MyISAM類型;反之,如果需要使用事務,或者需要更高的安全性,或者允許多用戶并發(fā)操作表的數(shù)據(jù),就應該首選InnoDB類型。例如,轉賬付款、在線購物、在線抓取等Web應用,就比較適合InnoDB類型。特別是在多用戶操作數(shù)據(jù)表的時候,InnoDB采用的是數(shù)據(jù)行鎖定方式,而非MyISAM采用的數(shù)據(jù)表鎖定方式。因此,在事務處理中,只要不是正在被事務處理的數(shù)據(jù)行,其他用戶仍然可以訪問數(shù)據(jù)表。然而,InnoDB在表空間管理、全文索引、商業(yè)許可等方面都有明顯的劣勢。除此之外,大多數(shù)虛擬主機、云主機提供商只允許使用MyISAM類型模式,因此也成為了Web應用中選擇表存儲類型和可移植性的一個重要因素。
因此,雖然InnoDB是MyISAM引擎的更新?lián)Q代產(chǎn)品,但是在大多數(shù)情況下,還是應該首選MyISAM類型。當然,也應該讓學生了解,兩種引擎在一定條件下也能共存,即MyISAM數(shù)據(jù)表和InnoDB數(shù)據(jù)表存在同一數(shù)據(jù)庫中。這樣數(shù)據(jù)庫設計者可以根據(jù)每個表的具體內(nèi)容和用途來分別選擇數(shù)據(jù)表的類型。
最后,需要告知學生的是,具體的運行速度收到系統(tǒng)硬軟件配置(尤其是內(nèi)存容量)、配置文件和應用程序代碼等影響,不能簡單判定哪種引擎更快,需要進行測試和模擬后再做出選擇。
雖然在學習MySQL數(shù)據(jù)庫課程前,學生已經(jīng)先修了“數(shù)據(jù)庫系統(tǒng)原理”的課程,但往往是事先已經(jīng)設計好數(shù)據(jù)庫,再進行操作,或者對于實際的數(shù)據(jù)庫設計缺乏經(jīng)驗。因此,對于實際應用中的數(shù)據(jù)庫結構(也稱為數(shù)據(jù)庫模式scheme)尤其不能隨意為之。
數(shù)據(jù)庫設計首先面臨的問題就是范式的選擇,即規(guī)范化normalization的過程,它可以小心地消除冗余以及解決數(shù)據(jù)庫完整性的問題。規(guī)范化是由IBM研究員EF Codd博士提出并創(chuàng)建的一系列范式規(guī)則。滿足這些范式的數(shù)據(jù)庫不會發(fā)生插入、刪除和更新操作異常。對于大多數(shù)數(shù)據(jù)庫設計來說,1NF、2NF、3NF、BCNF這幾種范式已經(jīng)能夠滿足要求。
然而,雖然范式理念十分強大,但實際的數(shù)據(jù)庫(尤其是Web應用中)設計中,需要考慮更多的因素,例如速度、冗余或不一致、程序難易等。有的時候,將數(shù)據(jù)結構優(yōu)化為最高存儲效率卻在操作編程上是不可取的。因此,范式在某種意義上更像是一種指導性意見,而不是根本原則。在實際的設計中,有時需要在范式和實際效率之前取得某種平衡。
在指導學生進行規(guī)范化設計時,應該讓學生充分進行需求分析和總體設計,找出需要訪問的具體信息和之間的邏輯關系。并提倡學生用筆和紙進行設計,開始時盡量不要使用工具軟件進行分析。甚至在筆者教學實踐中,實體-關系圖也有時會干擾學生的建模。因此,比較好的方式是最開始使用自然語言描述,再用集合映射圖表示對應關系,這樣做更加簡潔明了和容易排錯。
為了使學生掌握實際的表設計原則和方法,下面用一個具體的教學案例進行講解和分析。
課堂上,可以用一個BBS教學互動平臺的案例對學生進行教學,因為學生對這樣的應用比較熟悉,這樣學生容易產(chǎn)生代入感,有利于加深他們對內(nèi)容的理解。
首先,將所有信息放在一個表中,進行預先評估。數(shù)據(jù)存放在數(shù)據(jù)庫的一個表中:
userID, username, email, qq, tel, addr, jobID, jobtitle, jobcontent, replyID, replytitle, replycontent
根據(jù)定義,數(shù)據(jù)庫表符合第一范式,但是不滿足其他范式。因此,可以將數(shù)據(jù)庫表進一步分解為范化形式:
(1)userinfo:userID, username, email, qq, tel, addr.
(2)jobinfo:jobID, jobtitle, jobcontent.
(3)replyinfo:replyID, replytitle, replycontent.
(4)userjobinfo:userID, jobID.
(5)jobreplyinfo:jobID, replyID.
可以證明該設計是滿足第1、2、3、BCNF范式要求的。但是,在實際的Web工程中,卻存在冗余大、涉及表數(shù)量多、編程復雜的缺點。因此,還需要重新設計和化簡。
圖2 userinfo, userjobinfo, jobinfo對應關系集合映射與合并操作
觀察數(shù)據(jù)庫結構,發(fā)現(xiàn)在數(shù)據(jù)庫表中存在一對多關系這種較特殊的情況下,如圖2所示,userinfo和userjobinfo之間是一對多的關系,而userjobinfo和jobinfo是一一對應的關系。對于這種情況,我們可以進行數(shù)據(jù)表的合并而忽略第二范式原則的要求。因此,可以將一一對應的兩個表userjobinfo和jobinfo合并為新的表newjobinfo。同理,也可以將jobreplyinfo和replyinfo合并為新的表newreplyinfo。這樣可以一定量地減少數(shù)據(jù)冗余和簡化表的操作,新的設計為:
(1) userinfo:userID, username, email, qq, tel, addr
(2) newjobinfo:userID,jobID,jobtitle, jobcontent
(3) newreplyinfo:jobID,replyID, replytitle, replycontent
該方法并沒有使用實體-關系圖,而是使用數(shù)學中的集合映射來對學生進行講解,會使學生了解到,數(shù)據(jù)庫理論的核心——關系代數(shù)實質(zhì)就是集合論。這種教學方法的另一個好處是,通過這個例子說明數(shù)據(jù)庫的結構設計不是一成不變的,有的時候也可以進行動態(tài)演化,即開始設計為三大范式,而后面再進行合并操作簡化表結構。
在給學生講解這部分內(nèi)容時,一些相近的概念很容易混淆。所以首先必須徹底講解和分清字符集、編碼和校對的概念。
理論上講,字符集是語言所使用的符號;而編碼是將字符集從整數(shù)映射到字節(jié)的方法;校對規(guī)則是定義了比較字符串的方式。因此,這三個概念應該是嚴格區(qū)分的,但是由于學生對該知識點的空白,加上很多互聯(lián)網(wǎng)資源都使用字符集來表示代碼,可以當作同義詞使用。這些都會給學生造成混淆。
對于如何選擇字符集和校對規(guī)則,也需要對學生講解清楚。
首先,選擇目標字符集的時候,一定要選擇源字符集的超級,例如,選擇GBK 字符集而不是GB2312 字符集。GBK編碼是定長編碼,雙字節(jié)編碼,支持的系統(tǒng)多;而UTF-8編碼不是定長編碼,長度也在1 至4 字節(jié),但卻是互聯(lián)網(wǎng)廣泛支持的Unicode 字符集?;谶@些特點,MySQL Server 也使用UTF-8作為內(nèi)部本土編碼方式。實際Web開發(fā)中的最佳實現(xiàn)是在GBK和UTF-8中選擇一種適合自己網(wǎng)站特點的字符集。
然后,對于MySQL 中的字符集和校對規(guī)則,學生對于各種級別的設置往往會迷惑,這就需要教師不僅僅講授如何設置它們,更要講授這些設置發(fā)揮作用的時機和影響。另外,除了數(shù)據(jù)保存的字符集和校對規(guī)則,還存在客戶端和服務器之間交互的字符集和校對規(guī)則的設置。一般要求這連接級涉及的所有的字符集都完全一致,才可以確保用戶寫入的數(shù)據(jù)可以正確地讀出,尤其是對于中文字符。最后要對學生說明,這些設置都可以通過命令SET NAMES和修改mysql.ini文件兩種方法來靈活設置。
最后,對于這部分的內(nèi)容,最好舉反例來說明,錯誤的設置方法將會是應用中出現(xiàn)亂碼和丟失數(shù)據(jù)的根源。而當實際的Web應用中出現(xiàn)亂碼時候,除了檢查HTTP和HTML協(xié)議文本中的相關頭部外,還應該對MySQL中的字符集和校對規(guī)則設置進行排查。
本文以MySQL應用中的數(shù)據(jù)庫設計階段為出發(fā)點,結合實際的Web應用對數(shù)據(jù)庫的要求,對MySQL教學中的若干教學難點進行了梳理,并形成了指導學生最佳實踐的教學內(nèi)容和教學方法,以期消除學生的疑惑和不確定性,進一步提升學生的成就感和學習樂趣,并在實際的教學中收到了良好的效果。
[1] 王晶晶.mysql數(shù)據(jù)庫基礎教程[M].長春:吉林大學出版社,2015: 6-10.
[2] 李建中,王珊.數(shù)據(jù)庫系統(tǒng)原理[M].北京:電子工業(yè)出版社,2008: 17-20.
[3] 劉乃琦,李忠.PHP和MySQL Web應用開發(fā)[M].北京:人民郵電出版社,2015: 35-38.
責任編輯:劉 琳
AnalysisofTeachingDifficultiesinMySQLDatabaseCourse—TakingDatabaseDesignasanExample
LI Desheng
(College of Information and Network Engineering, Anhui Science and Technology University, Fengyang 233100, China)
In recent years, with the rising of Web development framework of PHP + MySQL, MySQL with the features of small size, complete function and free of charge has become one of the important professional courses linking toDatabaseSystemPrincipleandPHPWebDevelopmentcourses in computer and software engineering majors. However, as a new professional course, its curriculum, materials, resources and teaching research are not enough. Especially, some of the teaching difficulties in the course not only make students confused, but also affects the further application of the subsequent database. This paper, combined with the development and application of Web, analyzes some difficulties in MySQL teaching, and puts forward some teaching practice reform methods, hoping to form best practice teaching methods.
storage engine; environment configuration; paradigm; database design; character set; proofreading rules
2017-01-16
安徽省重大教學改革研究項目(2015zdjy121)
李德勝(1979-),男,湖北宜昌人,副教授,博士,主要從事信息與網(wǎng)絡工程方面研究。
G642
A
1009-3907(2017)10-0113-04