前言背景在過去的30年中,數據庫的研究帶來了巨大的生產力,使得數據庫系統成為軟件工程領域最重要的成果。目前,數據庫作為信息系統的基本框架,已從根本上改變了許多公司的運作方式。特別是在最近幾年里,隨著這項技術本身的發展,產生了一些功能更強大、使用更方便的系統。這使得數據庫系統變得越來越普及,用戶類型也越來越廣泛。遺憾的是,正是由于數據庫系統的簡單性,許多用戶有可能尚缺乏必要的知識,還不懂得如何開發正確且高效的系統,就開始創建數據庫及其應用程序了。這樣很可能導致所謂的“軟件危機”(software crisis,有時也稱為“軟件抑郁”(software depression))的延續。
編寫本書的最初動因是我們在工業界的工作經歷,當時我們為新軟件系統中數據庫的設計提供咨詢,間或也解決遺留系統中存在的種種問題。進入學術界后,我們從另一類用戶—學生那里發現了類似的問題。因此,本書的目標就是給出一本教程,盡可能清楚地介紹數據庫的基礎理論,并給出一套既能為專業技術人員亦能為非技術人員所用的數據庫設計方法學。
本書針對當前主流的商用產品—關系數據庫管理系統(DBMS)給出的設計方法學,已在學術界和工業界測試和使用了許多年。它包括三個主要階段:數據庫的概念設計、邏輯設計和物理設計。第一個階段在不考慮任何物理因素的前提下設計概念數據模型,得到的數據模型在第二階段被細化為邏輯數據模型,細化過程主要是去除在關系系統中無法表示的結構。在第三階段,邏輯數據模型被轉換成針對目標DBMS的物理設計,物理設計階段主要考慮如何設計存儲結構和訪問方法,以便有效并安全地訪問存儲在輔存中的數據庫。
該方法學按階段被分為一系列步驟。對于缺少經驗的設計者,最好按步驟進行設計,這里所提供的指南可幫助你完成整個過程。對于有經驗的設計者,該方法學的指導作用顯然會弱化,但經常可用于開發框架和檢查列表。為了幫助讀者學習使用上述方法學并理解其要點,整個方法學的描述中始終貫穿一個完整的DreamHome案例研究。附錄B還給出了另外三個案例,供讀者自行研究。
UML(統一建模語言)越來越多的公司都在規范各自的數據建模方法,即選擇一種特定的建模方法并在整個數據庫開發項目中始終如一地使用它。一種在數據庫概念設計和邏輯設計階段較為通用的高級數據模型是ER(實體-聯系)模型,這也是本書采用的模型。由于當前還沒有表示ER模型的標準方法,因此大部分書籍在描述關系DBMS的數據庫設計時,常常使用下述兩種表示方法之一:
Chen氏表示方法,即用矩形表示實體,用菱形表示聯系,用線段連接矩形和菱形。
Crow Feet(鴉爪)表示方法,仍用矩形表示實體,用實體間的連線表示聯系,在一對多聯系連線的多端有一個鴉爪標記。
當前,這兩種表示方法都有計算機輔助軟件工程(CASE)工具。然而,它們都難于使用和解釋。本書的較早版本曾使用Chen氏表示方法,而在隨后培生教育出版集團進行的一次問卷調查中,比較一致的意見是應該使用最新的稱為UML(Unified Modeling Language,統一建模語言)的面向對象建模語言。UML表示方法結合了面向對象設計三大流派的成分:Rumbaugh的OMT建模語言,Booch的面向對象分析和面向對象設計,以及Jacobson的Objectory。
換用表示方法主要有以下三個原因:(1)UML正成為一種工業標準,例如,對象管理組(OMG)已經采納UML作為對象方法的標準表示方法;(2)UML表達清楚并易于使用;(3)UML目前已被學術界用于面向對象分析與設計的教學,在數據庫模塊的教學中也使用UML將會更加一致。因此,在這個版本中,我們將采用UML的類圖作為ER模型的表示方法。讀者將會發現這種表示方法更加容易理解和使用。
第6版的更新之處擴展了第3章“數據庫的結構與Web”,增加了云計算。
修改了第21章“數據管理中的職業、法律與道德問題”。
增加了“數據倉庫與時態數據庫”(31.5節)。
每章后增加了新的思考題和習題。
修改了與SQL相關的章節,全面反映2011年公布的新標準SQL:2011。
修訂了第26章“復制與移動數據庫”。
修改了關于Web-DBMS集成和XML的章節。
與Oracle相關的內容一律修改為針對Oracle 11g。
讀者對象本書可作為本科生數據庫管理或數據庫設計的導論性教材,也可作為研究生或高年級本科生相關課程的教材,學時可分為一到兩個學期。通常信息系統、商業IT或計算機科學等專業都包含這類課程。
本書還可以作為一些IT專業人士的參考書,如系統分析和設計人員、應用程序開發人員、系統程序員、數據庫從業人員及獨立的自學者。隨著當今數據庫系統的廣泛使用,這些專業人士可能來自于需要數據庫的任何類型的公司。
讀者在學習關于物理數據庫設計的第18章和關于查詢處理的第23章之前,如果對附錄F中介紹的文件組織和數據結構相關概念有清楚的了解,那么將會有所幫助。理想的情況是這些背景知識已從前導課程中獲得。如果不具備這個條件,則可以在開始數據庫課程后,學完第1章立即學習附錄F。
如果讀者已經掌握了一門高級編程語言,比如C,那么在學習附錄I的嵌入式與動態SQL和28.3節的ObjectStore時會更有成效。
突出特點(1)為數據庫邏輯設計和概念設計提供了易用、逐步指導的方法學,該方法學基于廣泛采用的實體-聯系模型并將規范化作為驗證技術。此外,通過一個完整的案例研究來說明如何使用這套方法學。
(2)為數據庫物理設計提供了易用、逐步指導的方法學,包括:邏輯設計到物理實現的映射,文件組織方法的選擇,適合應用程序的索引結構,以及何時引入可控冗余。此外,通過一個完整的案例研究來說明如何使用這套方法學。
(3)用獨立的章節來講解以下三個主題:數據庫設計階段在整個系統開發生命周期中的位置與作用;如何使用實況發現技術來獲取系統需求;如何將UML用于整個方法學。
(4)每章都采用清晰且易于理解的表述方法,如突出顯示定義,明確給出各章學習目標,在各章最后進行小結。通篇使用了大量示例和圖表來說明概念。來自現實生活的DreamHome案例研究貫穿全書,另外還給出若干案例供學生選作課程實踐題目。
(5)擴充了下列最新的正式標準及事實標準:結構化查詢語言(SQL),舉例查詢(QBE),面向對象數據庫的對象數據管理組(ODMG)標準。
(6)利用三章的篇幅,以教程式風格介紹SQL標準,包含交互式和嵌入式SQL。
(7)專設一章討論IT和數據庫中的職業、法律與道德問題。
(8)全面討論了與分布式DBMS和復制服務器相關的概念和問題。
(9)全面介紹了基于對象的DBMS中的一些概念和問題。回顧了ODMG標準,介紹了在最新公布的SQL版本SQL:2011中出現的各種對象管理機制。
(10)擴展了作為數據庫應用平臺的Web部分的內容,并給出多個Web數據庫訪問的代碼示例。具體包括容器管理持久性(CMP)、Java數據對象(JDO)、Java持久性API(JPA)、JDBC、SQLJ、ActiveX數據對象(ADO)、ADO.NET和Oracle PL/SQL Pages(PSP)。
(11)介紹了半結構化數據及其與XML的關系,擴展了XML的內容和相關術語,包括XML Schema、XQuery、XQuery數據模型和形式語義。還討論了在數據庫中集成XML,以及為發布XML而在SQL:2008和SQL:2011中所做的擴展。
(12)全面介紹了數據倉庫、聯機分析處理(OLAP)和數據挖掘。
(13)全面介紹了用于數據倉庫數據庫設計的維度建模技術,并且通過一個完整的案例來演示如何使用該方法進行數據倉庫數據庫設計。
(14)介紹了DBMS系統實現的有關概念,包括并發技術和恢復控制、安全以及查詢處理和查詢優化。
教學方法在開始撰寫本書之前,我們的目標之一就是寫一本讓讀者容易接受和理解的教材,而不管讀者具備怎樣的背景知識和經驗。根據我們使用教材的經驗以及從很多同事、客戶和學生中吸收的意見,實際上存在若干讀者喜愛和不喜愛的設計特性。考慮到這些因素,本書決定采用如下的風格和結構:
在每章的開頭明確說明該章的學習目標。
清楚定義每一個重要的概念,并用特殊格式突出顯示。
通篇大量使用圖表來支持和闡明概念。
面向實際應用:為了做到這點,每章都包含了許多實際有效的示例以說明所描述的概念。
每章最后配有小結,涉及該章所有主要的概念。
每章最后配有思考題,問題的答案都可以在書中找到。
每章最后配有習題,教師可用其測試學生對章節內容的理解,自學者也可進行自測。全部習題的答案可以在原書配套的教輔資源“教師答案手冊”中找到。
教輔資源適用于本教材的教輔資源包括:
課程PPT。
教師答案手冊,包括所有課后思考題和習題的答案示例。
其他資源的配套網站:www.pearsonhighered.com/connolly-begg。
上述資源僅提供給在www.pearsonhighered.com/irc上注冊過的教師。請與當地的銷售代表聯系。
本書結構第一部分背景本書的第一部分介紹數據庫系統和數據庫設計。
第1章引入數據庫管理的概念。主要闡述了數據庫前身,即基于文件的系統之不足及數據庫方法所具備的優勢。
第2章總覽數據庫環境。主要討論了三層ANSI-SPARC體系結構的優點,介紹了目前最通用的數據模型,列出了多用戶DBMS應提供的各種功能。
第3章考察各種多用戶DBMS結構,討論了數據庫領域不同類型的中間件。分析Web服務,它能為用戶和SOA(面向服務的結構)提供新型的業務服務。該章簡要描述分布式DBMS和數據倉庫的結構,后面還將詳細討論。該章還給出一個抽象DBMS的內部結構以及Oracle DBMS的邏輯結構和物理結構,這一部分內容在數據庫管理初級課程中可以略去。
第二部分關系模型與語言本書的第二部分介紹關系模型和關系語言,即關系代數和關系演算、QBE(舉例查詢)和SQL(結構化查詢語言)。這部分還介紹了兩種非常流行的商用系統:Microsoft Access和Oracle。
第4章介紹當前最流行的數據模型—關系模型背后的概念,這是最常被選作商用標準的模型。具體安排是首先介紹術語并說明其與數學上的關系的聯系,然后討論關系完整性規則,包括實體完整性和引用完整性。這一章最后概述視圖,第7章還將進一步討論視圖。
第5章介紹關系代數和關系演算,并