數(shù)據(jù)庫(kù)原理

出版時(shí)間:2008-9  出版社:清華大學(xué)出版社  作者:(美) (克羅恩克Kroenke) (D.M.) (美) (  頁(yè)數(shù):437  

前言

  Colin Johnson是西雅圖一家小型制造廠的產(chǎn)品管理員。幾年前,Colin計(jì)劃構(gòu)建一個(gè)數(shù)據(jù)庫(kù)來(lái)跟蹤產(chǎn)品包中的產(chǎn)品。開始時(shí),他運(yùn)用電子制表軟件來(lái)完成這一工作,卻無(wú)法通過(guò)該表獲取所需的報(bào)表。Colin聽說(shuō)了Microsoft Access,希望該軟件能解決問(wèn)題。經(jīng)過(guò)幾天的嘗試,他發(fā)現(xiàn)無(wú)法掌握Access的使用方法,于是購(gòu)買了一些流行的Access書籍并努力學(xué)習(xí)。不過(guò)最終他還是放棄了,后來(lái)他聘請(qǐng)了一個(gè)顧問(wèn),該顧問(wèn)創(chuàng)建了一個(gè)大致可滿足Colin要求的應(yīng)用程序。一段時(shí)間以后,Colin想對(duì)此應(yīng)用程序作一些改動(dòng),但他卻不敢進(jìn)行這樣的嘗試?! olin是個(gè)成功的商人,他能夠主動(dòng)地去實(shí)現(xiàn)他的目標(biāo)。作為一個(gè)老練的Windows用戶,他可以通過(guò)自學(xué)掌握Excel、PowerPoint以及大量面向產(chǎn)品的應(yīng)用程序。但他在使用Access來(lái)解決問(wèn)題時(shí)卻停滯不前。Colin認(rèn)為“我確信我可以做到,但我沒(méi)有更多的時(shí)間”。這樣的事件非常引人注目,因?yàn)樵谶^(guò)去的10年內(nèi)上演了無(wú)數(shù)次?! icrosoft Corporation、Oracle和其他數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)廠商都意識(shí)到了這一情況,他們投入了數(shù)百萬(wàn)美元來(lái)創(chuàng)建更好的圖形用戶界面、數(shù)以百計(jì)的多窗格向?qū)?,以及眾多示例?yīng)用程序。遺憾的是,這樣的努力無(wú)法從根本上解決問(wèn)題。事實(shí)上,許多用戶并不清楚向?qū)Э梢詫?shí)現(xiàn)哪些功能。一旦這些用戶需要修改數(shù)據(jù)結(jié)構(gòu)或是組件(例如,窗體和查詢),就會(huì)陷入麻煩中,這令他們措手不及。如果不了解底層結(jié)構(gòu),這些用戶就只能絞盡腦汁,卻徒勞無(wú)功。最終也只能得到一些設(shè)計(jì)糟糕的數(shù)據(jù)庫(kù)和應(yīng)用程序,而無(wú)法滿足用戶的要求。  那么為什么像Colin這樣的用戶可以學(xué)會(huì)使用文字處理軟件或電子數(shù)據(jù)表這樣的產(chǎn)品,卻無(wú)法學(xué)會(huì)使用DBMS產(chǎn)品呢?其中一個(gè)主要原因就是許多人都不熟悉數(shù)據(jù)庫(kù)的基本概念。每個(gè)人可能都知道段落和邊距,卻無(wú)法理解關(guān)系的概念。其次,他們可能覺(jué)得使用DBMS產(chǎn)品一定比了解數(shù)據(jù)庫(kù)概念本身更容易?!拔覀兿胱龅闹皇歉櫼恍﹥?nèi)容,為什么實(shí)現(xiàn)起來(lái)卻這么困難?”如果不了解關(guān)系模型,在存儲(chǔ)數(shù)據(jù)之前將一張銷售發(fā)票分成5個(gè)單獨(dú)的表就可能使業(yè)務(wù)用戶感到迷惑?! 』靖拍睢 ‘?dāng)今的技術(shù)特點(diǎn)是如果不學(xué)習(xí)基本概念,那么就不可能成功地利用DBMS。憑借多年來(lái)為業(yè)務(wù)用戶開發(fā)數(shù)據(jù)庫(kù)的經(jīng)驗(yàn),我認(rèn)為數(shù)據(jù)庫(kù)的基本概念主要包括以下內(nèi)容:  ● 關(guān)系模型的基本概念  ● 結(jié)構(gòu)化查詢語(yǔ)言(SQL)  ● 數(shù)據(jù)建模  ● 數(shù)據(jù)庫(kù)設(shè)計(jì)  ● 數(shù)據(jù)庫(kù)管理  由于當(dāng)前Internet和World Wide Web的廣泛使用,因此可以增加一個(gè)更為基本的概念:  ● Web數(shù)據(jù)庫(kù)處理  像Colin這樣的用戶(或是將接受類似工作的學(xué)生)不需要像信息系統(tǒng)專家那樣深入地了解這些主題。因此,《數(shù)據(jù)庫(kù)原理》只介紹了一些基本的概念——這些內(nèi)容對(duì)于像Colin這樣的用戶(創(chuàng)建和使用小型數(shù)據(jù)庫(kù)的用戶)來(lái)說(shuō)至關(guān)重要。我已經(jīng)在Database Processing: Fundamentals, Designs, and Implementation一書中重寫、簡(jiǎn)化和刪除了一些內(nèi)容1。 不過(guò)在《數(shù)據(jù)庫(kù)原理》中,也力求討論準(zhǔn)確,不會(huì)產(chǎn)生誤導(dǎo)。即使學(xué)生們已學(xué)習(xí)過(guò)更高級(jí)的數(shù)據(jù)庫(kù)課程,也仍然可從《數(shù)據(jù)庫(kù)原理》中獲益。  獨(dú)立于DBMS產(chǎn)品的概念  《數(shù)據(jù)庫(kù)原理》假設(shè)學(xué)生沒(méi)有使用過(guò)任何特定的DBMS產(chǎn)品?!稊?shù)據(jù)庫(kù)原理》通過(guò)Microsoft Access、SQL Server 2005 Express Edition和MySQL 5.0舉例說(shuō)明了數(shù)據(jù)庫(kù)概念,從而使學(xué)生可以將這些產(chǎn)品作為工具使用,并且實(shí)際地嘗試練習(xí)書中的內(nèi)容,但是,所有的概念都適合于DBMS產(chǎn)品。通過(guò)這種方式,學(xué)生們可以理解所有數(shù)據(jù)庫(kù)的基礎(chǔ)知識(shí)—— 從小型的Access數(shù)據(jù)庫(kù)到大型的Oracle或DB2數(shù)據(jù)庫(kù)。  而且這一方法也避免了一個(gè)常見的問(wèn)題。在同時(shí)介紹概念和產(chǎn)品時(shí),學(xué)生容易將概念與產(chǎn)品特性、功能相混淆。例如參照完整性約束。在講授基礎(chǔ)理論時(shí),學(xué)生都知道在某些情況下,一個(gè)表中的列值必須總是由另一個(gè)表中的列值提供。學(xué)生也將知道這一約束如何出現(xiàn)在關(guān)系定義的上下文中,以及DBMS或應(yīng)用程序如何強(qiáng)制執(zhí)行這一約束。如果結(jié)合具體的DBMS教學(xué),如Access,那么學(xué)生將學(xué)到的知識(shí)就可能是:在某些情況下選取復(fù)選框,而在其他情況下不選取的具體操作。這樣很容易導(dǎo)致在介紹產(chǎn)品特性的同時(shí),使學(xué)生們淡忘了數(shù)據(jù)庫(kù)的基本理論?! ∪欢@并不是說(shuō)在《數(shù)據(jù)庫(kù)原理》中將不使用DBMS。相反,學(xué)生們可以通過(guò)使用企業(yè)版DBMS產(chǎn)品來(lái)熟悉這些基本概念。《數(shù)據(jù)庫(kù)原理》的這一版本包括了關(guān)于Access、SQL Server 2005 Express Edition和MySQL 5.0的充分的基本信息,從而使您可以在不借助其他書籍或資料的情況在課堂上介紹這些產(chǎn)品?!稊?shù)據(jù)庫(kù)原理》深入介紹了Access,因?yàn)樗窃趥€(gè)人數(shù)據(jù)庫(kù)方面非常流行的產(chǎn)品(并且包括在Microsoft Office Professional應(yīng)用程序套件中)。通過(guò)學(xué)習(xí)這些Access相關(guān)知識(shí),學(xué)生可以完成書中介紹的所有數(shù)據(jù)庫(kù)任務(wù),并且可能勝任一些課程的學(xué)習(xí)。然而,如果希望深入介紹特定的DBMS或使用《數(shù)據(jù)庫(kù)原理》中沒(méi)有介紹的DBMS產(chǎn)品,則需要提供額外的書籍或資料。Prentice-Hall提供了有關(guān)Microsoft Access 2003和其他DBMS產(chǎn)品的大量輔助讀物,可以結(jié)合《數(shù)據(jù)庫(kù)原理》一起學(xué)習(xí)?! ccess工作臺(tái)  《數(shù)據(jù)庫(kù)原理》前面的版本在附錄中介紹了Access。Access廣泛用于初級(jí)數(shù)據(jù)庫(kù)課程,因此這一版本介紹了如何使用Access的更多信息。每一章都帶有一個(gè)“Access工作臺(tái)”部分,其中使用Access舉例說(shuō)明了本章的概念和技術(shù)。“Access工作臺(tái)”的第一部分介紹了如何創(chuàng)建數(shù)據(jù)庫(kù)和簡(jiǎn)單的表,到最后的第七部分則介紹了針對(duì)Access數(shù)據(jù)庫(kù)的Web數(shù)據(jù)庫(kù)處理?!癆ccess工作臺(tái)”的作用不是全面地介紹Access,而是介紹包括了所有必要的基礎(chǔ)Access主題,從而使學(xué)生可以有效地構(gòu)建并使用Access數(shù)據(jù)庫(kù)?! ?fù)習(xí)題、練習(xí)題和實(shí)踐項(xiàng)目  學(xué)生能否學(xué)會(huì)最終運(yùn)用所學(xué)的知識(shí)非常重要,因此每章都提供了一些復(fù)習(xí)題、練習(xí)題(包括針對(duì)“Access工作臺(tái)”的練習(xí)題)和3個(gè)貫穿《數(shù)據(jù)庫(kù)原理》始終的項(xiàng)目。如果學(xué)生閱讀并理解了每一章的內(nèi)容,就應(yīng)該能知道復(fù)習(xí)題的答案。練習(xí)題要求學(xué)生將每章所講的概念應(yīng)用到具體的小問(wèn)題或任務(wù)中。  第一個(gè)項(xiàng)目Garden Glory介紹了一個(gè)向個(gè)人或企業(yè)提供園藝服務(wù)的合伙公司的數(shù)據(jù)庫(kù),并討論了該數(shù)據(jù)庫(kù)的開發(fā)和使用。第二個(gè)項(xiàng)目James River珠寶行分析了一家零售店為支持針對(duì)的購(gòu)買者而設(shè)計(jì)的程序的數(shù)據(jù)庫(kù)需求。第三個(gè)項(xiàng)目Queen Anne Curiosity商店介紹了零售商店的銷售和庫(kù)存需求?!稊?shù)據(jù)庫(kù)原理》的所有章節(jié)和附錄C中都包括了這3個(gè)項(xiàng)目。在每個(gè)實(shí)例中,都要求學(xué)生將各章中學(xué)到的知識(shí)運(yùn)用到項(xiàng)目中去。教師們可以填寫《數(shù)據(jù)庫(kù)原理》最后的調(diào)查表向培生出版集團(tuán)駐北京代表處領(lǐng)取教學(xué)支持資料,其中包括與《數(shù)據(jù)庫(kù)原理》相關(guān)的一些數(shù)據(jù)庫(kù)和示例數(shù)據(jù)。在過(guò)去30多年中,我們已經(jīng)發(fā)現(xiàn)數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)應(yīng)用程序的開發(fā)是一項(xiàng)令人愉快和有益的活動(dòng)。我們相信:數(shù)據(jù)庫(kù)的數(shù)量、大小和重要性會(huì)在將來(lái)不斷增加,并且該領(lǐng)域?qū)⒃絹?lái)越顯示其突出的地位。我們希望《數(shù)據(jù)庫(kù)原理》中介紹的概念、知識(shí)和技術(shù)將幫助學(xué)生成功地參與到現(xiàn)在和多年以后的數(shù)據(jù)庫(kù)項(xiàng)目構(gòu)建中。  對(duì)第2版的改進(jìn)  主要的改動(dòng)如下:  ● 介紹了SQL視圖(附錄C)?!  ?介紹了子類型/子類型實(shí)體(第4章和第5章)?!  ?使用了IE Crow’s Foot E-R圖而不是UML E-R模型以方便用戶使用,并且與Database Processing的第10版保持一致(第4章和后面的章節(jié))。  ● 重新安排了第6章和第7章中的主題——在第6章中作為數(shù)據(jù)庫(kù)管理的一部分介紹了分布式數(shù)據(jù)庫(kù)和面向?qū)ο蟮臄?shù)據(jù)庫(kù)。  ● 附帶介紹了基于Web的數(shù)據(jù)庫(kù)處理,包括創(chuàng)建Web頁(yè)面的特定步驟和代碼示例,這些Web頁(yè)面顯示存儲(chǔ)在數(shù)據(jù)庫(kù)中的數(shù)據(jù)(第7章)?!  ?介紹了商業(yè)智能(BI)系統(tǒng)的概念(第7章)?!  ?在每章和附錄C中使用“Access工作臺(tái)”介紹Access的基礎(chǔ)知識(shí)。  ● 介紹SQL Server 2005 Express Edition(附錄A)和MySQL 5.0(附錄B)的使用?! 〈送猓褂檬纠龜?shù)據(jù)集充分地開發(fā)了在《數(shù)據(jù)庫(kù)原理》各個(gè)部分中使用的3個(gè)示例數(shù)據(jù)庫(kù)——在每一章中使用的Wedgewood Pacific Corporation和Heather Sweeney Designs,以及在“Access工作臺(tái)”中使用的Wallingford Motors。這些數(shù)據(jù)庫(kù)的使用提供了全書各個(gè)章節(jié)之間概念示例的連續(xù)性,并且使學(xué)生可以創(chuàng)建實(shí)際的數(shù)據(jù)庫(kù)以試驗(yàn)每章中討論的主題?! 〈送?,還有一個(gè)沒(méi)有改動(dòng)的方面需要提及,即這一版中保留了第2版中增加的較為有效的規(guī)范化討論,并且使用說(shuō)明性的過(guò)程來(lái)規(guī)范化關(guān)系?!稊?shù)據(jù)庫(kù)原理》的第1版介紹了規(guī)范化的基本原理,讓學(xué)生自己應(yīng)用這些基本原理。第2版的第2章介紹了學(xué)生可以用于運(yùn)用規(guī)范化的4步過(guò)程。這一改動(dòng)不僅簡(jiǎn)化了規(guī)范化任務(wù),而且使規(guī)范化的基本原理更加易于理解。因此,當(dāng)前版本中沿用了這一方法。對(duì)于需要深入了解范式的教師,《數(shù)據(jù)庫(kù)原理》第5章中在討論范式時(shí)介紹了2NF和3NF的簡(jiǎn)短定義?! ≈饕獌?nèi)容  《數(shù)據(jù)庫(kù)原理》共包括7章和3個(gè)附錄。第1章解釋了使用數(shù)據(jù)庫(kù)的原因、數(shù)據(jù)庫(kù)的組成以及開發(fā)數(shù)據(jù)庫(kù)的方法。學(xué)生們將學(xué)習(xí)數(shù)據(jù)庫(kù)及其應(yīng)用程序的用途、數(shù)據(jù)庫(kù)相對(duì)于電子表格列表的差別和優(yōu)勢(shì)。第2章介紹了關(guān)系模型,定義了基本的關(guān)系模型術(shù)語(yǔ),同時(shí)還介紹了規(guī)范化原則的基本概念,并介紹了規(guī)范化過(guò)程?! 〉?章講述了基本的SQL語(yǔ)句。介紹了定義數(shù)據(jù)的基本SQL語(yǔ)句,如SQL SELECT和數(shù)據(jù)修改語(yǔ)句。《數(shù)據(jù)庫(kù)原理》并不介紹高級(jí)的SQL語(yǔ)句,只講述一些核心的語(yǔ)句。附錄C介紹了SQL視圖。接下來(lái)的3章討論了數(shù)據(jù)庫(kù)設(shè)計(jì)和管理。第4章使用實(shí)體-關(guān)系(E-R)模型解決數(shù)據(jù)建模問(wèn)題,其中包括對(duì)數(shù)據(jù)建模的需求、基本的E-R術(shù)語(yǔ)和概念,還提供了一個(gè)簡(jiǎn)短的E-R建模示例應(yīng)用程序(Heather Sweeney Designs)。第5章講述了數(shù)據(jù)庫(kù)設(shè)計(jì),解釋了規(guī)范化的基本概念。第4章示例中的數(shù)據(jù)模型在第5章中則被轉(zhuǎn)換為關(guān)系設(shè)計(jì)?! 〉?章討論了數(shù)據(jù)庫(kù)管理。構(gòu)建了一個(gè)作為功能數(shù)據(jù)庫(kù)的示例數(shù)據(jù)庫(kù),并且將其用作討論數(shù)據(jù)庫(kù)管理需求的示例。本章概述了并發(fā)控制、安全性和備份及恢復(fù)技術(shù)。數(shù)據(jù)庫(kù)管理主題對(duì)所有的數(shù)據(jù)庫(kù)都很重要,對(duì)個(gè)人的單用戶數(shù)據(jù)庫(kù)也是如此。事實(shí)上,這些主題在某些方面對(duì)于私人數(shù)據(jù)庫(kù)更為重要,因?yàn)樗鼈儧](méi)有專業(yè)的數(shù)據(jù)庫(kù)管理員來(lái)確保關(guān)鍵任務(wù)的執(zhí)行。第6章也討論了分布式數(shù)據(jù)庫(kù)和面向?qū)ο蟮臄?shù)據(jù)庫(kù)?! ∽詈?,第7章介紹了使用基于Web的數(shù)據(jù)庫(kù)處理,包括開放數(shù)據(jù)庫(kù)連接(ODBC)、活動(dòng)數(shù)據(jù)對(duì)象(ADO)、活動(dòng)服務(wù)器頁(yè)面(ASP)的討論。本章也討論了可擴(kuò)展標(biāo)記語(yǔ)言(XML)的出現(xiàn)和基本概念,并且介紹了商業(yè)智能(BI)系統(tǒng)?! 「戒汚提供了SQL Server 2005 Express Edition的簡(jiǎn)短介紹,附錄B則提供了MySQL 5.0的類似介紹。在每章和附錄C的“Access工作臺(tái)”中都包括了對(duì)Microsoft Access的介紹。

內(nèi)容概要

  本書是數(shù)據(jù)庫(kù)初學(xué)者和初級(jí)開發(fā)人員不可多得的數(shù)據(jù)庫(kù)寶典,其中融入了作者對(duì)數(shù)據(jù)庫(kù)深入透徹的理解和豐富的實(shí)際操作經(jīng)驗(yàn)。與第2版一樣,本版也深入淺出地描繪了數(shù)據(jù)庫(kù)原理及其應(yīng)用。但本版技術(shù)更新、實(shí)用性更強(qiáng),新增的內(nèi)容包括子類型/子類型實(shí)體、IE Crows Foot E-R圖、基于Wed的數(shù)據(jù)庫(kù)處理、商業(yè)智能系統(tǒng)、SQL視圖、SQL Server 2005 Express Edition和 My SQL 5.0的使用等?! 薪榻B了在成功管理數(shù)據(jù)庫(kù)系統(tǒng)的基本概念,包括: ·關(guān)系模型的基本原理 ·結(jié)構(gòu)化查詢語(yǔ)言(SQL) ·數(shù)據(jù)建模 ·數(shù)據(jù)庫(kù)設(shè)計(jì) ·數(shù)據(jù)庫(kù)管理 ·Web數(shù)據(jù)庫(kù)處理

作者簡(jiǎn)介

  David M.Kroenke,在1967年作為Rand Corporation公司的實(shí)習(xí)生時(shí)進(jìn)入了計(jì)算行業(yè),在此之后,他的職業(yè)生涯涉及教育、工業(yè)、顧問(wèn)和出版等領(lǐng)域?! roenke曾經(jīng)在科羅拉多州立大學(xué)、西雅圖大學(xué)教學(xué),目前在華盛頓大學(xué)教學(xué)。在多年的教學(xué)生涯中,他組織了數(shù)十次由大學(xué)教授參加的教學(xué)研討會(huì)。在1991年,International Association ofInformation System授予他“年度計(jì)算機(jī)教育家”的榮譽(yù)稱號(hào)?! ≡诠I(yè)方面,Kroenke曾經(jīng)為美國(guó)空軍和波音計(jì)算機(jī)服務(wù)工作,并且負(fù)責(zé)創(chuàng)立了個(gè)公司。他也曾經(jīng)是Microrim公司負(fù)責(zé)產(chǎn)品銷售和開發(fā)的副主席,并且是Wall Data公司在數(shù)據(jù)庫(kù)劃分方面的首席技術(shù)專家。Kroenke是語(yǔ)義對(duì)象數(shù)據(jù)模型的創(chuàng)始者,他所擁有的咨詢客戶包括mM公司、Microsoft、Computer Sciences公司,以及許多其他的公司和組織。  Kroenke的著作Database Processing最初出版于1977年,現(xiàn)在已經(jīng)是第10版。 Kroenke也出版了其他許多書籍,包括經(jīng)典的Business Compu~~r Systems(198i)。他最近編寫的書籍是UsingMIS的第1版。出于對(duì)成為海員的渴望,Kroenke也編寫了KnowYour Boat:The Guide tOEverything ThatMakes YourBoat Work。Kroenke現(xiàn)居住在華盛頓州的西雅圖市,他結(jié)過(guò)婚,有兩個(gè)孩子和兩個(gè)外孫?! avid J.Auer目前是西華盛頓大學(xué)的College of Business and Economics(CBE)信息系統(tǒng)和技術(shù)服務(wù)的主管,并且是CBE的決策科學(xué)部門的講師。他從1981年開始在CBE中任教,教授的課程包括Quantitative Methods、Production and Operations Management、Statistics、Finance and Management Information Systems。在1994年,他受雇于目前的CBE職位。除了管理CBE的計(jì)算機(jī)、網(wǎng)絡(luò)和其他技術(shù)資源之外,他還教授Management Information System課程。Auer負(fù)責(zé)教授Principles ofManagement Information Systems and Business Database Development課程,并且負(fù)責(zé)拓展CBE的網(wǎng)絡(luò)基礎(chǔ)結(jié)構(gòu)課程,包括計(jì)算機(jī)硬件和操作系統(tǒng)、遠(yuǎn)程通信和網(wǎng)絡(luò)管理。Auer已經(jīng)和其他人合作編寫了一些與MIS相關(guān)的書籍?! uer在華盛頓大學(xué)獲得了英語(yǔ)文學(xué)學(xué)士學(xué)位,在西華盛頓大學(xué)獲得了數(shù)學(xué)和經(jīng)濟(jì)學(xué)學(xué)士學(xué)位,并且在西華盛頓大學(xué)獲得經(jīng)濟(jì)學(xué)碩士學(xué)位和輔導(dǎo)心理學(xué)碩士學(xué)位。Auer是美國(guó)空軍軍官,他還作為組織開發(fā)專家和治療專家為Employee Assistance Program(EAP)工作。Auer和妻子Donna居住在華盛頓州的貝靈漢市,他是當(dāng)?shù)赜?jì)劃委員會(huì)(Planning Commission)的成員,并且積極參與社團(tuán)成長(zhǎng)和發(fā)展的相關(guān)問(wèn)題。他有兩個(gè)孩子和3個(gè)外孫。~

書籍目錄

第Ⅰ部分 基礎(chǔ)知識(shí)第1章 數(shù)據(jù)庫(kù)簡(jiǎn)介31.1 使用數(shù)據(jù)庫(kù)的原因41.1.1 關(guān)于列表的問(wèn)題41.1.2 使用關(guān)系數(shù)據(jù)庫(kù)71.1.3 關(guān)系表的處理131.2 數(shù)據(jù)庫(kù)系統(tǒng)的概念141.2.1 數(shù)據(jù)庫(kù)151.2.2 DBMS161.2.3 應(yīng)用程序181.2.4 個(gè)人數(shù)據(jù)庫(kù)系統(tǒng)和企業(yè)數(shù)據(jù)庫(kù)系統(tǒng)的比較201.3 Access工作臺(tái):第1部分——熟悉Microsoft Access221.3.1 創(chuàng)建Access數(shù)據(jù)庫(kù)231.3.2 創(chuàng)建數(shù)據(jù)庫(kù)表261.3.3 在表中插入數(shù)據(jù)——數(shù)據(jù)表視圖341.3.4 修改表中的數(shù)據(jù)——數(shù)據(jù)表視圖371.3.5 刪除表中的行——數(shù)據(jù)表視圖381.3.6 在表中插入數(shù)據(jù)——使用表單401.3.7 修改數(shù)據(jù)和刪除記錄——使用表單441.3.8 創(chuàng)建一個(gè)表的Access報(bào)表441.3.9 關(guān)閉數(shù)據(jù)庫(kù)并退出Access471.4 小結(jié)481.5 復(fù)習(xí)題491.6 練習(xí)題501.7 Access工作臺(tái)練習(xí)題511.8 Garden Glory項(xiàng)目問(wèn)題521.9 James River珠寶行項(xiàng)目問(wèn)題521.10 Queen Anne Curiosity商店項(xiàng)目問(wèn)題53第2章 關(guān)系模型552.1 關(guān)系562.1.1 一個(gè)關(guān)系示例與兩個(gè)非關(guān)系示例572.1.2 顯示關(guān)系結(jié)構(gòu)的說(shuō)明582.1.3 術(shù)語(yǔ)說(shuō)明592.2 鍵的類型592.2.1 復(fù)合鍵602.2.2 候選鍵與主鍵602.2.3 代理鍵632.2.4 外鍵與參照完整性約束642.3 NULL值的問(wèn)題682.4 函數(shù)依賴與規(guī)范化682.4.1 函數(shù)依賴692.4.2 再論主鍵與候選鍵702.4.3 規(guī)范化712.4.4 關(guān)系設(shè)計(jì)原則722.4.5 規(guī)范化過(guò)程722.4.6 規(guī)范化的示例742.5 Access工作臺(tái):第二部分——在Microsoft Access中操作多個(gè)表792.5.1 WMCRM數(shù)據(jù)庫(kù)中可能的修改問(wèn)題802.5.2 操作多個(gè)表842.5.3 創(chuàng)建表之間的關(guān)系862.5.4 使用包括兩個(gè)表的表單902.5.5 創(chuàng)建包括兩個(gè)表中數(shù)據(jù)的報(bào)表912.5.6 關(guān)閉數(shù)據(jù)庫(kù)并退出Access922.6 小結(jié)932.7 復(fù)習(xí)題942.8 練習(xí)題952.9 Access工作臺(tái)練習(xí)題962.10 Garden Glory項(xiàng)目問(wèn)題992.11 James River Jewelry珠寶行項(xiàng)目問(wèn)題1002.12 Queen Anne Curiosity商店項(xiàng)目問(wèn)題101第3章 結(jié)構(gòu)化查詢語(yǔ)言1053.1 示例數(shù)據(jù)庫(kù)1063.2 用于數(shù)據(jù)定義的SQL語(yǔ)句1103.2.1 使用表約束定義主鍵1153.2.2 使用表約束定義外鍵1163.2.3 向DBMS提交SQL語(yǔ)句1183.3 插入關(guān)系數(shù)據(jù)的SQL語(yǔ)句1213.4 SQL關(guān)系查詢語(yǔ)句1243.4.1 SQL SELECT/FROM/WHERE架構(gòu)1243.4.2 從單個(gè)表中讀取指定列1253.4.3 從單個(gè)表中讀取指定行1273.4.4 從單個(gè)表中讀取指定行和指定列1293.4.5 在WHERE子句中指定范圍、使用通配符和空值1313.4.6 對(duì)結(jié)果進(jìn)行排序1343.4.7 SQL內(nèi)置函數(shù)和計(jì)算1353.4.8 內(nèi)置函數(shù)和分組1383.4.9 使用子查詢處理多個(gè)表1393.4.10 使用連接查詢多個(gè)表1413.4.11 SQL JOIN…ON語(yǔ)法1453.4.12 外部連接1483.5 修改和刪除關(guān)系數(shù)據(jù)的SQL語(yǔ)句1503.5.1 修改數(shù)據(jù)1503.5.2 刪除數(shù)據(jù)1523.6 修改和刪除表和約束的SQL語(yǔ)句1533.6.1 DROP TABLE和ALTERTABLE語(yǔ)句1533.6.2 CHECK約束1543.7 SQL視圖1553.8 Access工作臺(tái):第三部分——在Microsoft Access中使用查詢1553.8.1 使用Microsoft Access SQL1563.8.2 使用Microsoft Access QBE1603.8.3 使用Microsoft Access 參數(shù)查詢1653.8.4 使用Microsoft Access SQL創(chuàng)建表1663.8.5 修改Access表以添加Access SQL不支持的數(shù)據(jù)需求1693.8.6 使用Microsoft Access SQL插入數(shù)據(jù)1743.8.7 使用Access SQL添加參照完整性約束1773.8.8 修改Access數(shù)據(jù)庫(kù)以添加Access SQL不支持的約束1783.8.9 關(guān)閉數(shù)據(jù)庫(kù)并退出Access1803.9 小結(jié)1813.10 復(fù)習(xí)題1823.11 練習(xí)題1843.12 Access工作臺(tái)練習(xí)題1863.13 Garden Glory項(xiàng)目問(wèn)題1893.14 James River珠寶行項(xiàng)目問(wèn)題1903.15 Queen Anne Curiosity商店項(xiàng)目問(wèn)題192第Ⅱ部分 數(shù)據(jù)庫(kù)設(shè)計(jì)和管理第4章 數(shù)據(jù)建模與實(shí)體-關(guān)系模型1974.1 需求分析階段1984.2 實(shí)體-關(guān)系數(shù)據(jù)模型1994.2.1 實(shí)體1994.2.2 屬性2004.2.3 標(biāo)識(shí)符2004.2.4 關(guān)系2014.3 實(shí)體-關(guān)系圖2044.3.1 E-R模型的不同版本2054.3.2 數(shù)據(jù)建模產(chǎn)品中E-R模型的變化2054.3.3 弱實(shí)體2074.3.4 ID依賴實(shí)體2074.3.5 非標(biāo)識(shí)符依賴的弱實(shí)體2094.3.6 子類實(shí)體2124.3.7 遞歸關(guān)系2134.4 開發(fā)E-R圖示例2144.4.1 Heather Sweeney Designs公司的數(shù)據(jù)庫(kù)2144.4.2 培訓(xùn)課的客戶列表2144.4.3 給客戶的信函模板2164.4.4 銷售發(fā)貨單2194.4.5 屬性說(shuō)明2224.4.6 業(yè)務(wù)規(guī)則2244.4.7 驗(yàn)證數(shù)據(jù)模型2244.5 Access工作臺(tái):第四部分——使用Microsoft Access來(lái)開發(fā)原型2254.5.1 為原始的數(shù)據(jù)模型創(chuàng)建表單模型2264.5.2 為修改過(guò)的數(shù)據(jù)模型創(chuàng)建表單原型2284.5.3 Access的Banded Form and Report Editors2304.5.4 關(guān)閉數(shù)據(jù)庫(kù)并退出Access2314.6 小結(jié)2314.7 復(fù)習(xí)題2324.8 練習(xí)題2344.9 Access工作臺(tái)練習(xí)題2344.10 Garden Glory項(xiàng)目問(wèn)題2354.11 James River Jewelry項(xiàng)目問(wèn)題2354.12 Queen Anne Curiosity 商店項(xiàng)目問(wèn)題236第5章 數(shù)據(jù)庫(kù)設(shè)計(jì)2395.1 把數(shù)據(jù)模型轉(zhuǎn)換為數(shù)據(jù)庫(kù)的設(shè)計(jì)方案2405.2 使用關(guān)系模型表示實(shí)體2415.2.1 ITEM實(shí)體的表示2415.2.2 CUSTOMER實(shí)體的表示2435.2.3 SALES-COMMISSION實(shí)體的關(guān)系設(shè)計(jì)2465.2.4 弱實(shí)體的表示2475.3 關(guān)系的表示2515.3.1 強(qiáng)實(shí)體中的關(guān)系2515.3.2 使用了弱實(shí)體的關(guān)系2585.3.3 子型實(shí)體關(guān)系的表示2595.3.4 遞歸關(guān)系的表示2605.4 Heather Sweeney Designs公司的數(shù)據(jù)庫(kù)設(shè)計(jì)2645.4.1 弱實(shí)體2655.4.2 關(guān)系2655.4.3 強(qiáng)制參照完整性2665.5 Access工作臺(tái):第五部分——Microsoft Access中的關(guān)系2685.5.1 Access中的多對(duì)多關(guān)系2685.5.2 Access中的一對(duì)一關(guān)系2685.5.3 關(guān)閉數(shù)據(jù)庫(kù)并退出Access2735.6 小結(jié)2735.7 復(fù)習(xí)題2745.8 練習(xí)題2765.9 Access工作臺(tái)練習(xí)題2765.10 Garden Glory公司項(xiàng)目問(wèn)題2775.11 James River珠寶行項(xiàng)目問(wèn)題2775.12 Queen Anne Curiosity商店項(xiàng)目問(wèn)題278第6章 數(shù)據(jù)庫(kù)管理2796.1 Heather Sweeney Designs公司的數(shù)據(jù)庫(kù)2806.2 并發(fā)控制2876.2.1 使用原子事務(wù)的必要性2876.2.2 并發(fā)事務(wù)處理2886.2.3 丟失更新問(wèn)題2896.2.4 并發(fā)問(wèn)題:臟讀取、不可重復(fù)讀取和幻象讀取2906.2.5 資源鎖定2906.2.6 串行化事務(wù)2926.2.7 死鎖2926.2.8 樂(lè)觀鎖定和悲觀鎖定2936.2.9 聲明鎖定特征2946.2.10 一致事務(wù)2956.2.11 事務(wù)隔離級(jí)別2966.3 游標(biāo)類型2976.4 數(shù)據(jù)庫(kù)安全2986.4.1 用戶賬戶2996.4.2 處理權(quán)限和責(zé)任3006.4.3 DBMS級(jí)別的安全3046.4.4 應(yīng)用程序級(jí)別的安全3056.5 數(shù)據(jù)庫(kù)備份與恢復(fù)3066.5.1 通過(guò)重新處理進(jìn)行恢復(fù)3066.5.2 通過(guò)回滾和前滾進(jìn)行恢復(fù)3076.5.3 DBA的其他職責(zé)3106.6 分布式數(shù)據(jù)庫(kù)的處理3106.6.1 分布式數(shù)據(jù)庫(kù)的類型3106.6.2 分布式數(shù)據(jù)庫(kù)面臨的挑戰(zhàn)3126.7 對(duì)象-關(guān)系數(shù)據(jù)庫(kù)3136.8 Access工作臺(tái):第六部分——Microsoft Access中的數(shù)據(jù)庫(kù)管理3136.8.1 Access中的數(shù)據(jù)庫(kù)安全3146.8.2 受保護(hù)數(shù)據(jù)庫(kù)的使用3226.8.3 受保護(hù)數(shù)據(jù)庫(kù)的管理3246.8.4 關(guān)閉數(shù)據(jù)庫(kù)并退出Access3246.9 小結(jié)3246.10 復(fù)習(xí)題3266.11 練習(xí)題3286.12 Access工作臺(tái)練習(xí)題3296.13 Garden Glory項(xiàng)目問(wèn)題3306.14 James River珠寶行項(xiàng)目問(wèn)題3316.15 Queen Anne Curiosity商店項(xiàng)目問(wèn)題332第7章 數(shù)據(jù)庫(kù)處理應(yīng)用程序和商業(yè)智能3357.1 數(shù)據(jù)庫(kù)處理的環(huán)境3367.1.1 查詢、表單和報(bào)表3377.1.2 客戶機(jī)/服務(wù)器以及傳統(tǒng)的應(yīng)用程序處理3397.1.3 存儲(chǔ)過(guò)程和觸發(fā)器3397.2 Web數(shù)據(jù)庫(kù)處理3407.2.1 ODBC3427.2.2 使用IIS進(jìn)行Web處理3457.2.3 Active Server Pages(ASP)3497.2.4 Active Data Objects(ADO)3527.2.5 Web數(shù)據(jù)庫(kù)處理面臨的挑戰(zhàn)3587.3 數(shù)據(jù)庫(kù)處理和XML3587.3.1 XML模式文件3597.3.2 XML和數(shù)據(jù)庫(kù)處理3607.3.3 XML Web Services3627.4 商業(yè)智能系統(tǒng)3637.5 Access工作臺(tái):第七部分:使用Microsoft Access進(jìn)行Web數(shù)據(jù)庫(kù)處理3677.5.1 Wallingford Motors的Web主頁(yè)3677.5.2 選擇數(shù)據(jù)庫(kù)文件3697.5.3 創(chuàng)建ODBC數(shù)據(jù)源3707.5.4 創(chuàng)建客戶聯(lián)系方式的視圖3717.5.5 創(chuàng)建ASP頁(yè)面3727.5.6 運(yùn)行ASP頁(yè)面3747.5.7 關(guān)閉3747.6 小結(jié)3757.7 復(fù)習(xí)題3767.8 練習(xí)題3787.9 Access工作臺(tái)練習(xí)題3807.10 Garden Glory公司項(xiàng)目問(wèn)題3817.11 James River Jewelry珠寶行項(xiàng)目問(wèn)題3817.12 Queen Anne Curiosity商店項(xiàng)目問(wèn)題382附錄A Microsoft SQL Server 2005 Express Edition簡(jiǎn)介383附錄B MySQL簡(jiǎn)介395附錄C SQL視圖409術(shù)語(yǔ)表427

章節(jié)摘錄

  6.1 Heather Sweeney Designs公司的數(shù)據(jù)庫(kù)  圖6-1給出了使用SQL Server 2005語(yǔ)法創(chuàng)建Heather Sweeney Designs公司(稱作HSD)數(shù)據(jù)庫(kù)的SQL語(yǔ)句。該SQL語(yǔ)句是從圖5-24中HSD數(shù)據(jù)庫(kù)設(shè)計(jì)中得到的,列的約束來(lái)自于圖4-21中的屬性說(shuō)明,參照完整性約束如圖5-25所示?! D6-2給出了用于填充HSD數(shù)據(jù)庫(kù)的SQL語(yǔ)句,同樣也是用SQL Server 2005語(yǔ)法編寫的。最后,最終得到的HSD數(shù)據(jù)庫(kù)如圖6-3中SQL Server 2005 Express Edition中的圖形所示?! D6-1 創(chuàng)建HSD數(shù)據(jù)庫(kù)的SQL 語(yǔ)句  圖6-1 (續(xù))  圖6-2 用來(lái)填充HSD數(shù)據(jù)庫(kù)的SQL 語(yǔ)句  圖6-2 (續(xù))  圖6-2 (續(xù))  圖6-2 (續(xù))  圖6-3 SQL Server 2005 Express Edition中的HSD數(shù)據(jù)庫(kù)  控制、安全和可靠的必要性  從單用戶數(shù)據(jù)庫(kù)到大型的跨機(jī)構(gòu)數(shù)據(jù)庫(kù)(如航空訂票系統(tǒng)),不同的數(shù)據(jù)庫(kù)在大小和涉及領(lǐng)域方面存在巨大差異。如圖6-4所示,它們?cè)谔幚矸绞缴弦灿兴煌?。  圖6-4 數(shù)據(jù)庫(kù)處理環(huán)境  《數(shù)據(jù)庫(kù)原理》將在第7章中討論數(shù)據(jù)庫(kù)處理應(yīng)用程序時(shí)詳細(xì)定義和討論圖6-4中所給出的各種環(huán)境。至此,只需要知道圖6-4中所有的應(yīng)用程序元素都可以在同一時(shí)間內(nèi)運(yùn)行即可。當(dāng)Web頁(yè)面ASP(Active Server Pages)和JSP(Java Server Pages)訪問(wèn)數(shù)據(jù)庫(kù)時(shí),可能會(huì)生成查詢、表單和報(bào)表,也可能會(huì)執(zhí)行存儲(chǔ)過(guò)程。在COBOL、C#以及其他程序設(shè)計(jì)語(yǔ)言中運(yùn)行的傳統(tǒng)應(yīng)用程序也可能正在處理數(shù)據(jù)庫(kù)的事務(wù)。所有這些操作都可能會(huì)導(dǎo)致編程代碼存儲(chǔ)到DBMS中——這是將在《數(shù)據(jù)庫(kù)原理》第7章中討論的觸發(fā)器和存儲(chǔ)過(guò)程。同時(shí),當(dāng)所有這些程序都在運(yùn)行時(shí),必須執(zhí)行這些約束(如參照完整性約束)。最后,數(shù)據(jù)庫(kù)的用戶可能會(huì)達(dá)到上百甚至上千,他們可能需要一周7天、一天24小時(shí)不間斷地處理數(shù)據(jù)庫(kù)?! ∷?,有必要引入3個(gè)數(shù)據(jù)庫(kù)管理功能,以管理有可能出現(xiàn)的混亂。首先,必須控制并發(fā)用戶的操作,確保其操作所產(chǎn)生的結(jié)果與期望的結(jié)果一致。第二,必須在適當(dāng)?shù)臅r(shí)候執(zhí)行安全措施,在適當(dāng)?shù)臅r(shí)候只有經(jīng)過(guò)授權(quán)的用戶才可以執(zhí)行授權(quán)的操作。最后,在數(shù)據(jù)庫(kù)出現(xiàn)故障時(shí),必須運(yùn)行備份和恢復(fù)技術(shù)和程序來(lái)保護(hù)數(shù)據(jù)庫(kù),從而在必要時(shí)能快速而精確地恢復(fù)它。我們將依次考慮以上這些情況,在第7章中還將看到在使用Web應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)的時(shí)候已經(jīng)開始使用這些管理功能了?! ?.2 并發(fā)控制  并發(fā)控制的目的是保證一個(gè)用戶的工作不會(huì)對(duì)另一個(gè)用戶的工作產(chǎn)生不合理的影響。在某些情況下,這些措施保證了當(dāng)該用戶和其他用戶一起操作時(shí),所得到的結(jié)果和他單獨(dú)操作時(shí)的結(jié)果相同。在另一些情況下,這表示用戶的工作按預(yù)定的方式受到其他用戶的影響?! ±?,在一個(gè)訂貨系統(tǒng)中,用戶應(yīng)該能夠訪問(wèn)一個(gè)訂單,無(wú)論此時(shí)是否有其他用戶訪問(wèn)該訂單,或者同時(shí)有上百個(gè)用戶在訪問(wèn),所得到的結(jié)果都相同。另一方面,如果用戶希望打印一份最新的存貨清單,他就可能需要得到其他用戶目前正在改動(dòng)的數(shù)據(jù),即使這些改動(dòng)以后可能會(huì)被取消?! ∵z憾的是,還沒(méi)有一種并發(fā)控制技術(shù)或機(jī)制可以處理所有的情況。它們都有利有弊。例如,用戶可以通過(guò)鎖定整個(gè)數(shù)據(jù)庫(kù)而得到非常嚴(yán)格的并發(fā)控制,但是在這個(gè)用戶進(jìn)行處理時(shí),其他任何用戶都不能執(zhí)行任何操作了。這是嚴(yán)格的保護(hù)措施,但是這樣做的代價(jià)也非常高。正如您將看到的,也可以采取其他措施,可能這些措施更難通過(guò)編程的方式實(shí)現(xiàn)或執(zhí)行,但是可以得到更多的吞吐量。當(dāng)然,還有其他一些擴(kuò)大吞吐量的措施,但也只是對(duì)低層次的并發(fā)控制而言。設(shè)計(jì)多用戶數(shù)據(jù)庫(kù)應(yīng)用程序時(shí),開發(fā)人員必須權(quán)衡這些利弊?! ?.2.1 使用原子事務(wù)的必要性  在大多數(shù)數(shù)據(jù)庫(kù)應(yīng)用中,用戶都以事務(wù)的形式提交工作,事務(wù)也稱為邏輯工作單元(logical units of work,LUW)。事務(wù)(或LUW)是對(duì)數(shù)據(jù)庫(kù)執(zhí)行的一系列操作,這一系列操作或者全部成功運(yùn)行,或者是不執(zhí)行其中任何一個(gè)操作。在后一種情況下,數(shù)據(jù)庫(kù)保持原樣。因?yàn)檫@些事務(wù)是以單元的形式執(zhí)行的,所以有時(shí)把這樣的事務(wù)稱為原子(atomic)事務(wù)。在記錄新的訂單時(shí),請(qǐng)考慮以下的一系列數(shù)據(jù)庫(kù)操作:  (1) 修改客戶記錄,增加Amount Owed值?! ?2) 修改銷售員的記錄,增加Commission Due值?! ?3) 將新的訂單記錄插入到數(shù)據(jù)庫(kù)中?! 〖僭O(shè)最后一步可能由于文件空間不足而失敗。如果前兩個(gè)改動(dòng)都得以執(zhí)行,而第三步卻失敗了,設(shè)想這樣可能引起的混亂??蛻艨赡鼙灰蟾犊?,而他從來(lái)沒(méi)收到過(guò)這個(gè)訂單;銷售人員可能會(huì)收到關(guān)于這個(gè)訂單的傭金,而訂單并沒(méi)有送給客戶。很明顯,這3個(gè)操作需要作為整體來(lái)執(zhí)行:或者全部執(zhí)行,或者都不執(zhí)行?! D6-5比較了下面兩種情況的結(jié)果:將這些操作作為一系列獨(dú)立步驟來(lái)執(zhí)行(見圖6-5(a)),以及作為原子事務(wù)來(lái)執(zhí)行(見圖6-5(b))。注意,當(dāng)自動(dòng)執(zhí)行這些步驟而其中一個(gè)步驟失敗時(shí),則表明沒(méi)有對(duì)數(shù)據(jù)庫(kù)做任何改動(dòng)。同時(shí),還應(yīng)注意應(yīng)用程序必須使用命令Start Transaction、Commit Transaction和Rollback Transaction等來(lái)標(biāo)記事務(wù)邏輯的邊界。對(duì)于不同的DBMS產(chǎn)品,這些命令的形式有所不同?! D6-5 應(yīng)用一系列操作事務(wù)和多個(gè)步驟事務(wù)的結(jié)果比較  6.2.2 并發(fā)事務(wù)處理  如果一個(gè)數(shù)據(jù)庫(kù)同時(shí)處理兩個(gè)事務(wù),則稱這兩個(gè)事務(wù)為并發(fā)事務(wù)。盡管可能在用戶看來(lái)好像是同時(shí)處理這些并發(fā)事務(wù)的,但實(shí)際情況并不是這樣,因?yàn)樘幚頂?shù)據(jù)庫(kù)的機(jī)器的中央處理器(CPU)一次只能執(zhí)行一個(gè)指令,因此通常這些事務(wù)是交叉執(zhí)行的,也就是說(shuō),操作系統(tǒng)在不同任務(wù)之間來(lái)回切換CPU服務(wù),這樣在給定時(shí)間間隔內(nèi)執(zhí)行其中一個(gè)事務(wù)的某個(gè)部分。任務(wù)之間的切換非??焖伲匀绻袃蓚€(gè)人并排坐在瀏覽器前,同時(shí)對(duì)同一個(gè)數(shù)據(jù)庫(kù)進(jìn)行處理,可以相信他們的事務(wù)是同時(shí)完成的。但是,事實(shí)上這兩個(gè)事務(wù)是交叉執(zhí)行的?! D6-6顯示了兩個(gè)并發(fā)的事務(wù)。用戶A的事務(wù)是讀取并修改Item 100,再將其重新寫入數(shù)據(jù)庫(kù)中。用戶B執(zhí)行相同的操作,但對(duì)象是Item 200。CPU處理用戶A的事務(wù),直到它必須等待讀取或?qū)懭氩僮魍瓿桑蛘叩却渌牟僮魍瓿?。然后,操作系統(tǒng)切換到用戶B的控制上。然后,CPU開始處理用戶B的事務(wù),直到發(fā)生類似的對(duì)事務(wù)處理的中斷,這時(shí)操作系統(tǒng)又將控制權(quán)轉(zhuǎn)回到用戶A上。同樣的,對(duì)用戶來(lái)說(shuō),這一處理過(guò)程看起來(lái)是同步的,但它實(shí)際上是交叉執(zhí)行的,或者說(shuō)是并發(fā)的?! D6-6 兩個(gè)用戶的任務(wù)并發(fā)處理的示例  6.2.3 丟失更新問(wèn)題  因?yàn)橛脩粼谔幚聿煌臄?shù)據(jù),所以圖6-6所示的并發(fā)處理不會(huì)出現(xiàn)什么問(wèn)題。但是假設(shè)兩個(gè)用戶同時(shí)都希望對(duì)Item 100進(jìn)行操作。例如,用戶A希望訂購(gòu)5套Item 100,而用戶B則希望訂購(gòu)3套。  圖6-7描述了這個(gè)問(wèn)題。用戶A讀取Item 100的記錄,該記錄傳送到用戶的工作區(qū)。根據(jù)記錄,還有10套存貨。然后,用戶B讀取Item 100的記錄,這些數(shù)據(jù)又傳送到該用戶的工作區(qū)。同樣,根據(jù)記錄,還有10套存貨。現(xiàn)在用戶A提取其中的5套,在他的用戶工作區(qū)中將存貨數(shù)目減為5,并將記錄重新寫入Item 100。用戶B提取了3套,在他的用戶工作區(qū)中將存貨數(shù)目減為7,并將記錄重新寫入Item 100。這樣數(shù)據(jù)庫(kù)將出現(xiàn)錯(cuò)誤,顯示還有7套Item 100庫(kù)存。回顧該流程,開始庫(kù)存是10,用戶A提取了5套,用戶B提取了3套,數(shù)據(jù)庫(kù)最后顯示庫(kù)存中還剩7套。顯然,這是錯(cuò)誤的?! ≡趦蓚€(gè)用戶剛獲得數(shù)據(jù)時(shí),這些數(shù)據(jù)是正確的。但是,當(dāng)用戶B讀取記錄時(shí),用戶A已經(jīng)有了需要更新的副本。這種情況稱為丟失更新問(wèn)題(lost update problem)或并發(fā)更新問(wèn)題(concurrent update problem)。另一個(gè)類似的問(wèn)題稱為非一致讀取問(wèn)題(inconsistent read problem)。在這種情況下,用戶A讀取的數(shù)據(jù)已經(jīng)被用戶B的部分事務(wù)處理過(guò)。其結(jié)果是用戶A讀取了錯(cuò)誤的數(shù)據(jù)?! D6-7 丟失更新問(wèn)題的示例  6.2.4 并發(fā)問(wèn)題:臟讀取、不可重復(fù)讀取和幻象讀取  并發(fā)處理有可能引起一些問(wèn)題,這些問(wèn)題都有其標(biāo)準(zhǔn)化的名字:臟讀取、不可重復(fù)讀取和幻象讀取。當(dāng)一個(gè)事務(wù)讀取了一個(gè)尚未提交到數(shù)據(jù)庫(kù)但已經(jīng)過(guò)修改的記錄時(shí),這種情況稱為臟讀取(dirty read)。比如,在下面的情況中就會(huì)發(fā)生臟讀?。喝绻粋€(gè)事務(wù)讀取一行數(shù)據(jù),而這行數(shù)據(jù)被另一個(gè)事務(wù)修改過(guò),但是后來(lái)第二個(gè)事務(wù)又取消了修改。如果事務(wù)重新讀取以前讀取過(guò)的數(shù)據(jù),并且發(fā)現(xiàn)另一個(gè)事務(wù)對(duì)其進(jìn)行了修改和刪除,這稱為不可重復(fù)讀取(nonrepeatable read)。當(dāng)事務(wù)重新讀取數(shù)據(jù),但發(fā)現(xiàn)在讀取該數(shù)據(jù)后已有另一事務(wù)插入了新的數(shù)據(jù)行,這就稱為幻象讀取(phantom read)?! ?.2.5 資源鎖定  可以通過(guò)一種辦法來(lái)彌補(bǔ)由并發(fā)處理引起的不一致問(wèn)題,即在將要修改某些數(shù)據(jù)行或表時(shí)禁止多個(gè)應(yīng)用程序同時(shí)獲取這些行或表的副本。這個(gè)方法稱為資源鎖定(resource locking)。該方法是鎖定將要更新的數(shù)據(jù),從而禁止共享,這樣就防止了并發(fā)處理問(wèn)題的發(fā)生。圖6-8給出了使用鎖定命令的處理步驟。  因?yàn)閿?shù)據(jù)被鎖定,用戶B的事務(wù)必須等待,直到用戶A處理完Item 100的數(shù)據(jù)為止。在運(yùn)用該策略后,只有在用戶A完成對(duì)Item 100的修改后,用戶B才可以讀取Item 100的記錄。在這種情況下,最終保存在數(shù)據(jù)庫(kù)中的Item 100的數(shù)目是2,這才是正確的數(shù)字(一開始的數(shù)據(jù)是10,然后A取走5,B取走3,最后剩下2)?! D6-8 帶有顯式鎖定的并發(fā)處理示例  鎖定可以由DBMS自動(dòng)執(zhí)行,也可以由應(yīng)用程序或查詢用戶發(fā)給DBMS的命令執(zhí)行。DBMS執(zhí)行的鎖定稱為隱式鎖定(implicit lock);而命令執(zhí)行的鎖定稱為顯式鎖定(explicit lock)?! ≡谇懊娴氖纠?,數(shù)據(jù)行被鎖定。但是,不是所有的鎖定都應(yīng)用在這個(gè)級(jí)別上。一些DBMS產(chǎn)品的鎖定針對(duì)的是頁(yè)面級(jí),有些針對(duì)表,有些則針對(duì)數(shù)據(jù)庫(kù)。鎖定的規(guī)模稱為鎖定粒度(lock granularity)。對(duì)于粒度較大的鎖定,DBMS容易管理,但是經(jīng)常引發(fā)沖突。而較小粒度的鎖定則不易管理(DBMS需要跟蹤和檢查許多細(xì)節(jié)內(nèi)容),但是較少引發(fā)沖突的情況?! ℃i定也因類型的不同而各異。排它鎖定(exclusive lock)可以鎖定對(duì)產(chǎn)品項(xiàng)的任何類型的訪問(wèn)。其他任何事務(wù)都不可以讀取或修改數(shù)據(jù)。共享鎖定(shared lock)鎖定的是正在修改的產(chǎn)品項(xiàng),但是不拒絕對(duì)數(shù)據(jù)的讀取。這就是說(shuō),其他事務(wù)可以讀取被鎖定的產(chǎn)品項(xiàng),只是不能修改數(shù)據(jù)?! ?.2.6 串行化事務(wù)  并發(fā)處理兩個(gè)或多個(gè)事務(wù)時(shí),所得數(shù)據(jù)庫(kù)的結(jié)果在邏輯上應(yīng)該和事務(wù)以任意串行方式處理后所得到的結(jié)果保持一致。以這種方式處理并發(fā)事務(wù)的模式稱為串行模式?! ?shí)現(xiàn)串行化的方式有許多種。一種方式是使用二段鎖定(two-phased locking)處理事務(wù)。采用這種策略時(shí),事務(wù)可以根據(jù)需要決定是否使用鎖定,但是一旦釋放了第一個(gè)鎖定,就不可以再使用其他任何鎖定。因此,事務(wù)就有一個(gè)增生階段(growing phase),即獲取鎖定的階段,還有一個(gè)收縮階段(shrinking phase),即釋放鎖定的階段?! ≡S多DBMS產(chǎn)品使用一種特殊的二段鎖定。如果使用了這類鎖定時(shí),那么在事務(wù)的執(zhí)行過(guò)程中都可以進(jìn)行鎖定,但是直到發(fā)出COMMIT或ROLLBACK命令時(shí)才能釋放鎖定。這種策略比二段鎖定的要求更嚴(yán)格,但更容易實(shí)現(xiàn)?! 】紤]一個(gè)訂貨事務(wù),該事務(wù)涉及處理CUSTOMER表、SALESPERSON表和OREDER表中的數(shù)據(jù)。為了確保數(shù)據(jù)庫(kù)不會(huì)因?yàn)椴l(fā)行為而產(chǎn)生異常,訂貨事務(wù)在需要時(shí)可以鎖定CUSTOMER表、SALESPERSON表和ORDER表,修改所有的數(shù)據(jù)庫(kù),然后釋放所有的鎖定?! ?.2.7 死鎖  盡管鎖定解決了一個(gè)問(wèn)題,但同時(shí)也產(chǎn)生了另一個(gè)問(wèn)題??紤]兩個(gè)用戶都希望從庫(kù)存中訂購(gòu)兩個(gè)產(chǎn)品項(xiàng)時(shí)可能發(fā)生的情況。假設(shè)用戶A希望訂購(gòu)一些紙張,如果她可以得到紙張,則可能還需要再訂購(gòu)一些鉛筆。同樣假設(shè)用戶B希望訂購(gòu)一些鉛筆,如果他可以得到鉛筆,也可能需要再訂購(gòu)一些紙張。處理過(guò)程如圖6-9所示?! ≡趫D6-9中,用戶A和用戶B都被鎖定的狀態(tài)稱為死鎖(deadlock),有時(shí)稱為致命包含(deadly embrace)。其中每個(gè)用戶都在等待另一個(gè)用戶已經(jīng)鎖定的資源。解決這個(gè)問(wèn)題通常有兩種方法:阻止死鎖發(fā)生,或者允許死鎖發(fā)生,然后打開該死鎖?! D6-9 死鎖示例  有多種方式可以防止死鎖的發(fā)生。一種方法是允許用戶一次只發(fā)出一個(gè)鎖定請(qǐng)求;事實(shí)上,用戶必須立刻鎖定當(dāng)前所需的所有資源。如果示例中的用戶A一開始就同時(shí)鎖定了紙張和鉛筆記錄,則死鎖無(wú)論如何不會(huì)發(fā)生。第二種防止死鎖的方法是規(guī)定所有應(yīng)用程序鎖定資源的順序必須完全相同?! 缀趺恳粋€(gè)DBMS都有檢測(cè)死鎖的算法。當(dāng)死鎖發(fā)生時(shí),一般的解決方法是回滾其中的一個(gè)事務(wù)并取消它對(duì)數(shù)據(jù)庫(kù)所做的改動(dòng)。  6.2.8 樂(lè)觀鎖定和悲觀鎖定  激活鎖定的方式一般有兩種。沒(méi)有沖突發(fā)生時(shí)采用樂(lè)觀鎖定(optimistic locking)。讀取數(shù)據(jù),處理事務(wù),執(zhí)行更新,然后檢查是否發(fā)生沖突。如果不存在沖突,事務(wù)就可以完成。如果存在沖突,則重復(fù)事務(wù),直到?jīng)]有沖突。采用悲觀鎖定(pessimistic locking)時(shí),假定存在沖突。首先使用一個(gè)鎖定,處理事務(wù),然后釋放鎖定。  圖6-10和圖6-11顯示了使用這兩種方式處理同一個(gè)示例的情況。在這個(gè)示例中,事務(wù)將PRODUCT表中鉛筆行的數(shù)量減少5。圖6-10顯示了樂(lè)觀鎖定的情況。首先讀取數(shù)據(jù),并且將鉛筆的Quantity當(dāng)前值存入OldQuantity變量。然后處理事務(wù),假設(shè)所有這些操作都得以順利實(shí)現(xiàn),則PRODUCT就得到一個(gè)鎖。這個(gè)鎖可能只對(duì)鉛筆行起作用,或者可作用于更高的粒度級(jí)別。無(wú)論何種情況,都將執(zhí)行一條更新鉛筆行的SQL語(yǔ)句,其中的WHERE條件指定Quantity的當(dāng)前值等于OldQuantity值。如果沒(méi)有其他的事務(wù)修改鉛筆行的Quantity值,那么這個(gè)UPDATE語(yǔ)句就可成功執(zhí)行。如果有另一個(gè)事務(wù)修改了鉛筆行的Quantity值,則UPDATE操作將會(huì)失敗,需要重新執(zhí)行事務(wù)?! D6-10 樂(lè)觀鎖定示例  圖6-11描述了對(duì)相同事務(wù)采用悲觀鎖定的邏輯。在這種情況下,在所有操作開始運(yùn)行前,PRODUCT(在某個(gè)粒度級(jí)別上)得到一個(gè)鎖定。然后讀取數(shù)值,處理事務(wù),執(zhí)行UPDATE語(yǔ)句,最后再解除對(duì)PRODUCT的鎖定?! ?lè)觀鎖定的優(yōu)點(diǎn)是當(dāng)事務(wù)處理完后才獲取鎖定。因此,鎖定的持續(xù)時(shí)間比悲觀鎖定更短。如果事務(wù)復(fù)雜或客戶機(jī)的速度較慢(因?yàn)閭鬏斞舆t或用戶在執(zhí)行其他工作、用戶休息或者沒(méi)有退出應(yīng)用程序就關(guān)機(jī)等),鎖定持續(xù)的時(shí)間就會(huì)相對(duì)少很多。如果鎖定粒度大(如整個(gè)PRODUCT表),這個(gè)優(yōu)點(diǎn)就顯得更為重要?! D6-11 悲觀鎖定的示例  樂(lè)觀鎖定的缺點(diǎn)是,如果針對(duì)鉛筆行同時(shí)有很多操作,事務(wù)就可能必須重復(fù)執(zhí)行很多次。因此,如果事務(wù)需要對(duì)指定行執(zhí)行很多操作(比如購(gòu)買一種熱門股票),就不適合使用樂(lè)觀鎖定?! ?.2.9 聲明鎖定特征  并發(fā)控制是一個(gè)復(fù)雜的問(wèn)題;一些鎖定的類型和策略必須經(jīng)過(guò)反復(fù)試驗(yàn)和糾正之后才能決定。因?yàn)檫@個(gè)以及其他原因,數(shù)據(jù)庫(kù)應(yīng)用程序一般不顯式地使用鎖定。相反,程序標(biāo)記事務(wù)邊界,然后聲明它們希望DBMS使用的鎖定行為的類型。通過(guò)這種方法,如果需要改變鎖定行為,就不需要重新編寫應(yīng)用程序來(lái)鎖定事務(wù)的不同區(qū)域,而只需修改鎖定聲明。  圖6-12描述了一個(gè)鉛筆事務(wù),以BEGIN TRANSACTION、COMMIT TRANSATION和ROLLBACK TRANSACTION等語(yǔ)句標(biāo)記事務(wù)的邊界。這些邊界提供了DBMS執(zhí)行不同鎖定策略所需的基本信息。如果現(xiàn)在開發(fā)人員聲明(通過(guò)系統(tǒng)參數(shù)或類似途徑)需要樂(lè)觀鎖定,那么DBMS將隱式地在適當(dāng)?shù)奈恢蒙显O(shè)置鎖定類型。如果后來(lái)希望改為悲觀鎖定,那么DBMS會(huì)隱式地將悲觀鎖定設(shè)置在另一個(gè)位置?! D6-12 標(biāo)記事務(wù)邊界的示例  6.2.10 一致事務(wù)  有時(shí)候,會(huì)看到首字母縮略詞ACID運(yùn)用到事務(wù)上。所謂ACID事務(wù)是一種原子性的(atomic)、一致的(consistent)、隔離的(isolated)和持久的(durable)事務(wù)。原子性和持久性都容易定義。原子事務(wù)是指或者執(zhí)行事務(wù)中所有的數(shù)據(jù)庫(kù)操作,或者不執(zhí)行其中任何一個(gè)操作。持久性事務(wù)是指事務(wù)中所有提交的修改都是永久的。DBMS不會(huì)取消這些修改,即使在發(fā)生錯(cuò)誤時(shí)也是如此。如果事務(wù)是持久的,那么DBMS將在需要時(shí)提供輔助措施來(lái)恢復(fù)在所有提交操作中進(jìn)行的修改?! ⌒g(shù)語(yǔ)一致性和隔離性不像原子性和持久性那樣容易定義。請(qǐng)考慮以下的SQL更新命令:  UPDATE 			CUSTOMER  SET 						AreaCode = 425  WHERE 				ZipCode =98050  假設(shè)在CUSTOMER表中有500000行,其中有500行的ZipCode值均為98050。那么DBMS需要花費(fèi)一些時(shí)間才能找到這所有的500行。在這段時(shí)間內(nèi),允許其他事務(wù)更新CUSTOMER的AreaCode或ZipCode字段嗎?如果SQL語(yǔ)句是一致的,這樣的更新就是不允許的。如果在SQL語(yǔ)句執(zhí)行時(shí)找到了匹配行,則將對(duì)這些行集進(jìn)行更新。這種一致性稱為語(yǔ)句級(jí)一致性(statement level consistency)?! ‖F(xiàn)在考慮包含兩個(gè)SQL更新語(yǔ)句的事務(wù):  BEGIN TRANSACTION  UPDATE CUSTOMER  SET AreaCode=425  WHERE ZipCode=98050  . . .  {other transaction work}  . . .  UPDATE CUSTOMER  SET Discount=0.05  WHERE AreaCode=425  . . .  {other transaction work}  . . .  COMMIT TRANSACTION  在這個(gè)上下文中,“一致性”又表示何種意義呢?語(yǔ)句級(jí)一致性表示不同的語(yǔ)句將獨(dú)立處理一致的數(shù)據(jù)行,但是在這兩個(gè)SQL語(yǔ)句執(zhí)行的間隔中,允許其他用戶對(duì)這些數(shù)據(jù)行進(jìn)行修改。事務(wù)級(jí)一致性(transaction level consistency)意味著,兩個(gè)SQL語(yǔ)句作用到的所有數(shù)據(jù)行在整個(gè)事務(wù)運(yùn)行期間都受到保護(hù)?! ∪欢?,也可以發(fā)現(xiàn),在實(shí)現(xiàn)事務(wù)級(jí)一致性時(shí),事務(wù)本身并不能發(fā)現(xiàn)自身的變化。在上面的示例中,第二個(gè)SQL語(yǔ)句并不知道有些數(shù)據(jù)行已經(jīng)被第一個(gè)SQL語(yǔ)句改變?! ∫虼?,當(dāng)聽到“一致性”這個(gè)術(shù)語(yǔ)時(shí),需要進(jìn)一步確定它屬于哪種一致性。此外,也需要小心處理事務(wù)級(jí)一致性的潛在問(wèn)題。隔離(isolated)的情況更為復(fù)雜,我們將在接下來(lái)的章節(jié)中講解?! ?.2.11 事務(wù)隔離級(jí)別  1992年,ANSI SQL標(biāo)準(zhǔn)定義了4個(gè)事務(wù)隔離級(jí)別(isolation level),這種隔離標(biāo)準(zhǔn)指定了允許產(chǎn)生哪種并發(fā)控制問(wèn)題。圖6-13展示了這4個(gè)隔離級(jí)別?! 「?離 級(jí) 別  讀取未提交  讀取已提交  可重復(fù)讀取  可串行化  問(wèn)題  類型  臟讀取  可能  不可能  不可能  不可能  不可重復(fù)讀取  可能  可能  不可能  不可能  幻象讀取  可能  可能  可能  不可能  圖6-13 隔離級(jí)別匯總  使用這4個(gè)隔離級(jí)別的目的是讓應(yīng)用程序編程人員能夠聲明將使用的事務(wù)隔離級(jí)別,然后由DBMS通過(guò)管理鎖定來(lái)實(shí)現(xiàn)相應(yīng)的事務(wù)隔離級(jí)別。如圖6-13所示,“讀取未提交”隔離級(jí)別允許“臟讀取”、“不可重復(fù)讀取”和“幻象讀取”。在“讀取已提交”隔離級(jí)別中,不允許“臟讀取”。在“可重復(fù)讀取”隔離級(jí)中,禁止“臟讀取”和“不可重復(fù)讀取”。而在“可串行化”隔離級(jí)別中,禁止上面的3種操作?! ‰m然吞吐量也和工作負(fù)荷以及應(yīng)用程序的編寫方式息息相關(guān),但從總體來(lái)說(shuō),隔離級(jí)別越高,吞吐量越小。而且,不是所有的DBMS產(chǎn)品都會(huì)同時(shí)支持這4種隔離級(jí)別,產(chǎn)品對(duì)它們的支持方式和對(duì)應(yīng)用程序開發(fā)人員的要求也各有不同?! ?.3 游標(biāo)類型  游標(biāo)(cursor)是一種指針,指向從SQL SELECT語(yǔ)句得到的結(jié)果行集,它常常通過(guò)SELECT語(yǔ)句來(lái)定義。比如,下面的語(yǔ)句定義了一個(gè)名為TransCursor的游標(biāo),該游標(biāo)的操作對(duì)象是由SELECT語(yǔ)句指定的行集:  DECLARE CURSOR TransCursor AS  SELECT 			*  FROM 						[TRANSACTION]  WHERE 				PurchasePrice > 10000;  在應(yīng)用程序打開某個(gè)游標(biāo)后,該程序可以把該游標(biāo)放到結(jié)果集中的某個(gè)地方。最常見的情況是,把游標(biāo)放到第一行或最后一行,但是也可能放在其他地方。  一個(gè)事務(wù)可以打開多個(gè)游標(biāo)——可以依次打開,也可以同時(shí)打開。此外,可能打開同一個(gè)表的兩個(gè)或多個(gè)游標(biāo);可能直接打開關(guān)于該表的游標(biāo),也可能是通過(guò)關(guān)于該表的SQL視圖來(lái)打開。由于游標(biāo)需要相當(dāng)大的內(nèi)存,因此同時(shí)打開很多游標(biāo)(比如,為一千個(gè)當(dāng)前事務(wù)打開游標(biāo))將消耗大量的內(nèi)存。減少游標(biāo)所帶來(lái)負(fù)擔(dān)的一個(gè)方法是定義縮容(reduced-capability)游標(biāo),并在不需要滿容量游標(biāo)的時(shí)候使用它們?! D6-14給出了Windows環(huán)境中所使用的4種游標(biāo)類型(其他系統(tǒng)中的游標(biāo)類型也與此類似)。最簡(jiǎn)單的游標(biāo)是“只向前游標(biāo)(forward only cursor)”。通過(guò)該游標(biāo),應(yīng)用程序只能向記錄前面執(zhí)行。對(duì)于由事務(wù)中其他游標(biāo)或其他事務(wù)所做的修改,只有當(dāng)它們發(fā)生在游標(biāo)所在行之前才是可見的?! ×硗?種游標(biāo)類型又被稱為“可滾動(dòng)游標(biāo)(scrollable cursor)”,因?yàn)閼?yīng)用程序可以向記錄前面或后面滾動(dòng)。靜態(tài)游標(biāo)(static cursor)快速繪制并處理關(guān)系的圖,使用這種游標(biāo)進(jìn)行的修改是可見的,而來(lái)自其他源的修改都是不可見的?! ?dòng)態(tài)游標(biāo)(dynamic cursor)是一種很有特色的游標(biāo)。對(duì)于動(dòng)態(tài)游標(biāo)而言,所有以行的順序進(jìn)行的插入、更新、刪除和修改都是可見的。除非事務(wù)的隔離級(jí)別是臟讀取,否則只有提交的修改才是可見的。  鍵集游標(biāo)(keyset cursor)結(jié)合了靜態(tài)游標(biāo)和動(dòng)態(tài)游標(biāo)的一些特點(diǎn)。打開該游標(biāo)后,將保存每一行的主鍵的值。當(dāng)應(yīng)用程序把游標(biāo)放在行中時(shí),DBMS使用該鍵值來(lái)讀取行的當(dāng)前值。由本事務(wù)或其他事務(wù)中的其他游標(biāo)所插入的新行是不可見的。如果應(yīng)用程序發(fā)出一個(gè)對(duì)行的更新命令而該行已經(jīng)被其他游標(biāo)刪掉了,那么DBMS將創(chuàng)建一個(gè)新行,該行保持舊的鍵值,并把更新的數(shù)值插入到新行中(假設(shè)所有必需的字段都存在)。對(duì)于動(dòng)態(tài)游標(biāo)而言,除非事務(wù)的隔離級(jí)別是臟讀取,否則只有已提交的更新和刪除對(duì)于游標(biāo)來(lái)說(shuō)是可見的?! ?duì)于每種類型的游標(biāo)來(lái)說(shuō),支持游標(biāo)所需的系統(tǒng)開銷和處理的數(shù)量也不相同。一般來(lái)說(shuō),開銷隨著類型的下降(如圖6-14所示)而增加。因此,為了提高DBMS的性能,應(yīng)用程序開發(fā)人員應(yīng)該創(chuàng)建足以完成工作的游標(biāo)即可。同時(shí),了解特定的DBMS如何實(shí)現(xiàn)游標(biāo)以及游標(biāo)是否位于服務(wù)器或客戶機(jī)上也是非常重要的。有些情況下,把動(dòng)態(tài)游標(biāo)放到客戶機(jī)上可能比把靜態(tài)游標(biāo)放到服務(wù)器上要更好。因?yàn)樾阅苋Q于DBMS產(chǎn)品以及應(yīng)用程序需求所使用的實(shí)現(xiàn)方式,所以并沒(méi)有規(guī)定一般規(guī)則?! ∮?標(biāo) 類 型  說(shuō)  明  注  釋  只向前游標(biāo)  應(yīng)用程序只能向記錄前面移動(dòng)  對(duì)于由事務(wù)中其他游標(biāo)或其他事務(wù)所做的修改,只有當(dāng)它們發(fā)生在游標(biāo)所在行的前面時(shí)才是可見的  靜態(tài)游標(biāo)  應(yīng)用程序在打開游標(biāo)時(shí)才可以看到數(shù)據(jù)  由靜態(tài)游標(biāo)所做的修改是可見的。來(lái)自其他源的修改是不可見的。允許向前和向后的滾動(dòng)  鍵集游標(biāo)  當(dāng)打開鍵集游標(biāo)時(shí),每行的主鍵都保存到了記錄集中。當(dāng)應(yīng)用程序訪問(wèn)行時(shí),該鍵用來(lái)取回該行的當(dāng)前值  來(lái)自任何源的更新都是可見的。來(lái)自鍵集游標(biāo)外部的源的插入是不可見的(因?yàn)樵阪I集中沒(méi)有這些源的鍵)。來(lái)自鍵集游標(biāo)的插入顯示在該記錄集的底部。來(lái)自任何源的刪除都是可見的。而以行的順序排列的修改都是不可見的。如果隔離級(jí)別是臟讀取,那么提交的更新和刪除都是可見的;否則只有提交的更新和刪除才是可見的  動(dòng)態(tài)游標(biāo)  任何類型的修改以及來(lái)自任何源的修改都是可見的  所有按記錄集順序進(jìn)行的插入、更新、刪除和修改操作都是可見的。如果隔離級(jí)別是臟讀取,那么未提交的修改是可見的。否則,只有提交的修改才是可見的  圖6-14 游標(biāo)類型的匯總  需要小心的是:如果沒(méi)有指定事務(wù)的隔離級(jí)別或沒(méi)有指定被打開游標(biāo)的類型,那么那么DBMS將使用默認(rèn)的級(jí)別和類型。這些默認(rèn)的級(jí)別和類型對(duì)于您的應(yīng)用程序來(lái)說(shuō)可能非常適合,但是它們也可能成為麻煩。因此,即使可以不考慮這些問(wèn)題,但是這些問(wèn)題所帶來(lái)的后果也是無(wú)法回避的。所以必須搞懂DBMS產(chǎn)品的功能?! ?.4 數(shù)據(jù)庫(kù)安全  數(shù)據(jù)庫(kù)安全的目的就是確保只有授權(quán)用戶才可以在授權(quán)時(shí)間內(nèi)進(jìn)行授權(quán)的操作。這一目標(biāo)通常分為兩個(gè)部分:身份驗(yàn)證(即確保用戶擁有首先使用該系統(tǒng)的基本權(quán)限)和授權(quán)(即授予用戶對(duì)系統(tǒng)進(jìn)行特定操作的具體權(quán)限和許可)。如圖6-15所示,用戶驗(yàn)證要求用戶通過(guò)密碼(或其他明確的身份證明,如手指紋的生物儀器掃描等)登錄到系統(tǒng)中,而用戶授權(quán)則是通過(guò)授予用戶DBMS特定的許可而達(dá)到的?! D6-15 數(shù)據(jù)庫(kù)安全的身份驗(yàn)證與授權(quán)  注意,僅僅通過(guò)身份驗(yàn)證(用戶登錄到系統(tǒng)中)對(duì)于數(shù)據(jù)庫(kù)的使用來(lái)說(shuō)還是不夠的——除非用戶還獲得了相應(yīng)的許可,否則他(或她)就不可以訪問(wèn)數(shù)據(jù)庫(kù)或執(zhí)行使用數(shù)據(jù)庫(kù)的操作?! ∫虼?,實(shí)現(xiàn)數(shù)據(jù)庫(kù)安全的目標(biāo)很難,但是無(wú)論執(zhí)行哪些改進(jìn),數(shù)據(jù)庫(kù)開發(fā)小組都必須確定(1)哪些用戶可以使用數(shù)據(jù)庫(kù)(即進(jìn)行身份驗(yàn)證);(2)每個(gè)用戶的處理權(quán)限和責(zé)任。這些安全需求可以通過(guò)DBMS的安全特性以及寫入應(yīng)用程序的附加安全特性來(lái)實(shí)現(xiàn)。  6.4.1 用戶賬戶  比如,考慮示例Heather Sweeney Designs公司的數(shù)據(jù)庫(kù)安全需求。必須采取措施來(lái)控制訪問(wèn)數(shù)據(jù)庫(kù)的員工。其中一個(gè)方法是為每個(gè)員工創(chuàng)建用戶賬戶。圖6-16展示了SQL Server 2005中在DBMS安全級(jí)別上創(chuàng)建用戶登錄HSD-User的情況?! D6-16 數(shù)據(jù)庫(kù)服務(wù)器登錄的創(chuàng)建  該步驟所創(chuàng)建的是DBMS(而不是特定的數(shù)據(jù)庫(kù))中最初的用戶賬戶,相應(yīng)賦予的密碼是HSD-User+password,在第7章HSD Web頁(yè)面中也需要這一密碼。注意,在Windows環(huán)境中,控制身份驗(yàn)證的方法有兩種:第一種,使用Windows操作系統(tǒng)來(lái)控制身份驗(yàn)證;第二種,通過(guò)賬戶的登錄名和密碼來(lái)創(chuàng)建SQL Server內(nèi)部用戶賬戶。對(duì)于其他DBMS產(chǎn)品而言,如果沒(méi)有像SQL Server一樣被操作系統(tǒng)指定,那么只能使用第二種方法,即使用內(nèi)部用戶賬戶?! ?yīng)該小心管理用戶賬戶和密碼。DBMS賬戶和密碼安全的正確術(shù)語(yǔ)、特性和功能取決于所使用的DBMS產(chǎn)品?! ?.4.2 處理權(quán)限和責(zé)任  所有主流的DBMS產(chǎn)品都提供了限制特定客戶對(duì)特定對(duì)象進(jìn)行特定操作的工具。DBMS安全的一般模型如圖6-17所示。  圖6-17 DBMS安全模型  根據(jù)圖6-17所示,可以賦予用戶一個(gè)或多個(gè)角色(組),一個(gè)角色可以擁有一個(gè)或多個(gè)用戶。用戶、角色和對(duì)象(使用的是其通用的含義)擁有許多許可。每個(gè)許可然后被賦予一個(gè)用戶或角色以及一個(gè)對(duì)象。一旦用戶通過(guò)了DBMS的身份驗(yàn)證,DBMS將把該人的行為限制在用戶確定的許可范圍內(nèi),或限制在用戶所賦予的角色的許可范圍內(nèi)?! ‖F(xiàn)在,考慮Heather Sweeney Designs公司的用戶身份驗(yàn)證問(wèn)題。該公司存在3類用戶:administrative assistant(行政助理),management(經(jīng)理,即Heather),systems administrator(系統(tǒng)管理員,即Heather的顧問(wèn))。圖6-18是Heather根據(jù)她的業(yè)務(wù)需要確定的處理權(quán)限?! ⌒姓砜梢宰x取、插入和修改所有表中的數(shù)據(jù),但是只可以刪除SEMINAR_CUSTOMER和LINE_ITEM中的數(shù)據(jù)。這就意味著,他們有權(quán)利從培訓(xùn)課中刪除客戶,并可以從訂單中刪除產(chǎn)品項(xiàng)。經(jīng)理除了不能刪除CUSTOMER數(shù)據(jù)外,可以對(duì)所有的表執(zhí)行所有操作。這里Heather考慮到,鑒于贏得客戶的不易,她不愿因?yàn)椴恍⌒膭h除了CUSTOMER數(shù)據(jù)而失去客戶?! ∽詈?,系統(tǒng)管理員可以修改數(shù)據(jù)庫(kù)的結(jié)構(gòu),對(duì)其他用戶進(jìn)行授權(quán)(授予權(quán)限),但不能對(duì)數(shù)據(jù)進(jìn)行操作。系統(tǒng)管理員不是用戶,因此不允許其訪問(wèn)用戶數(shù)據(jù)。這一限制似乎很有限。畢竟,如果系統(tǒng)管理員可以指定權(quán)限,他(或者她)可以通過(guò)改變權(quán)限來(lái)繞開安全系統(tǒng),從而可以進(jìn)行所需要的任何操作,修改數(shù)據(jù),然后將權(quán)限再修改回去。這些情況都有可能發(fā)生,但是會(huì)在DBMS日志中留下審計(jì)跟蹤。這些以及對(duì)安全系統(tǒng)進(jìn)行改變的需求可以阻止系統(tǒng)管理員進(jìn)行未授權(quán)的活動(dòng)。這明顯優(yōu)于允許系統(tǒng)管理員具有無(wú)效的用戶數(shù)據(jù)訪問(wèn)權(quán)限。

編輯推薦

  本書中介紹了在成功管理數(shù)據(jù)庫(kù)系統(tǒng)的基本概念,包括:關(guān)系模型的基本原理、結(jié)構(gòu)化查詢語(yǔ)言(SQL)、數(shù)據(jù)建模、數(shù)據(jù)庫(kù)設(shè)計(jì)、數(shù)據(jù)庫(kù)管理、Web數(shù)據(jù)庫(kù)處理。

圖書封面

評(píng)論、評(píng)分、閱讀與下載


    數(shù)據(jù)庫(kù)原理 PDF格式下載


用戶評(píng)論 (總計(jì)0條)

 
 

 

250萬(wàn)本中文圖書簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書網(wǎng) 手機(jī)版

京ICP備13047387號(hào)-7