本書詳細講解了數據庫的基本理論與技術,包括數據模型、查詢語言、存儲結構、邏輯設計以及與實現和性能有關的問題,如并發(fā)、恢復、安全和優(yōu)化等。全書分為四部分,共2章,每章后面均附有小結和練習。此書的最大特點是對數據模型做了較全面的論述,講解了5種數據模型:關系模型、面向對象模型、邏輯模型、網狀模型和層次模型。每種數據模型都圍繞著數據模型的三要素(即實體-聯(lián)系的表達、查詢和約束)來講解,并對不同數據模型的表達能力及特點進行了比較分析,此外,還講述了不同數據模型的存儲結構。關系模型是現在很流行的數據模型;面向對象模型和邏輯模型(演繹數據模型)在2世紀8年代至9年代形成,雖然沒有流行起來,但其不少研究成果已被關系模型所吸收;網狀模型和層次模型已成為歷史,但在數據庫新技術(如面向對象模型和XML查詢)的研究中仍繼續(xù)發(fā)揮著借鑒作用。本書可作為計算機相關專業(yè)研究生和本科生的教材,也適合于數據庫領域的研究者和工作人員參考閱讀,以了解各種數據模型的基本思想和特點。譯者序數據庫技術是最重要的計算機技術之一,在計算機應用中起著舉足輕重的作用。數據庫理論和技術的核心是數據庫模型。自數據庫技術產生以來,大約出現過6種主要的數據庫模型:網狀模型和層次模型、關系模型、面向對象模型和演繹模型,以及正在研究的半結構化和XML模型。數據庫系統(tǒng)采用什么數據模型,一般就稱為什么類型的數據庫系統(tǒng)。其中網狀和層次數據庫是2世紀7年代之前得到廣泛應用的數據庫技術,早已被關系數據庫代替,但在其他模型數據庫的研究中(如面向對象數據庫和半結構化與XML數據庫),仍然發(fā)揮著積極的作用。關系模型自2世紀7年代產生以來一直是數據庫技術的主流;面向對象數據庫和演繹數據庫在2世紀8年代至2世紀9年代的研究取得了豐碩的成果,但由于種種原因沒有在應用中流行起來,而其研究成果卻大量地被關系數據庫所吸收,并且在數據庫領域中具有重要的理論意義;半結構化和XML數據庫是2世紀9年代末開始研究的數據庫技術,目前還不成熟并且沒有統(tǒng)一的名字。關系模型由于其簡潔性、良好的數學基礎和突出的表達與適應能力,一直在利用數據庫技術的最新研究成果不斷擴充,并在數據產品中得以應用;查詢語言SQL3(或SQL99)標準就是在面向對象數據庫技術的推動下產生的,它吸收了演繹數據庫的研究成果,閉包和遞歸計算就是其中一例。特別是,還把關系和對象技術的結合命名為對象-關系數據庫技術;進而,在目前的關系數據庫產品中一直在不斷地吸收半結構化和XML數據庫的研究成果。這幾種數據庫模型雖然各有特點,甚至看起來截然不同,但它們之間卻存在著深刻的聯(lián)系。在表現數據結構、數據操作和完整性約束上(被稱為數據庫模型的三大要素),以及在表達能力上都有相通之處并各有千秋。目前,論述網狀和層次數據庫的書很少,而論述面向對象和演繹數據庫的書則往往是大部頭的專著,但在一本書中系統(tǒng)地論述各種數據庫模型及其相互關系的書卻不多見,本書正好彌補了這一缺憾。全書較詳細地論述了前5種數據庫模型,并論述了適用于各種模型的存儲結構,以及規(guī)范化和數據庫邏輯設計問題,最后簡述了數據庫管理系統(tǒng)的實現及性能上的有關問題,如并發(fā)處理、恢復、安全和性能優(yōu)化等。本書的最大特色是,對5種數據庫模型統(tǒng)一以數據結構、數據操作、數據完整性約束和表達能力為主線進行論述和比較,其中對一些問題的提法和思路頗有獨到之處,極具啟發(fā)性。總而言之,本書是數據庫研究者不可多得的一本參考書。遺憾的是,由于本書出版較早,沒有把半結構化和XML數據庫研究的有關內容包含進來,并且書中在講解面向對象部分時以典型的面向對象數據庫GEMESTONE為例子,與ODMG標準和SQL3標準的有關內容及表達方法有一些區(qū)別。不過,關于后者,讀者可以由作者網頁的授課大綱得到一些相關信息。另外,對演繹數據庫,本書未出現DATALOG這個通常用于說明邏輯數據庫模型和查詢語言的名字,但本書所講的內容就是DATALOG的核心內容。本書適合作為研究生和本科生的教材,也適用于數據庫研究者及數據庫研發(fā)人員參考閱讀。原書中使用了一些不常用的術語,如shell,anchor,signal等,因為書中有明確的常規(guī)術語與之相對應,含意不難理解,故譯文中按常規(guī)字面譯法翻譯,而沒有改為常規(guī)術語。原書中的一些文字上的錯誤,譯文中已加以改正。參加本書翻譯工作的有:李天柱(第9章和第1章)、肖艷芹(第6章至第8章和第11章至第13章)、楊文柱(第14章至第16章和第2章)、任建利(第1章、第2章及第5章的一部分)、馬穎麗(第17章和第19章)、黃煒(第18章)、郝亞南(第3章、第4章及第5章的一部分)等;在李天柱的指導下,楊文柱、肖艷芹、郝亞南對全書進行了審校及定稿。對本書的翻譯工作做出貢獻的還有張波、張志強、孫兆豪、宋鑫、陳少飛、徐林昊、張邵華、肖計田、邊小凡、李俊、羅朝暉、高麗敏、袁方、朱亮、劉大中等。由于譯者水平所限,書中難免有不妥之處,敬請讀者批評指正。前言本書介紹了大學計算機科學課程中數據庫理論方面的傳統(tǒng)主題。此書并不具有獨創(chuàng)性,因為所闡述思想的大部分都是為大家所熟知的。本書的特點在于通過對內容的組織和概念解釋,從而更加清晰地闡明了數據庫的理論。但書中沒有包含數據庫實現技術及分布式數據庫技術,除最后一章之外也沒有在其他地方討論性能問題。在學生熟悉了本書所討論的這些模型、語言和設計等問題之后,可以為進一步的學習打下堅實的基礎。第一部分介紹了五種數據庫模型。這些模型代表了現在(關系模型)、將來(面向對象和演繹模型)和過去(網狀和層次模型)的研究成果。為了與當前關系模型的重要性保持一致,本書中占篇幅最大的是關系模型,包括了關系表示(數據、聯(lián)系和約束)、關系代數和演算,以及對結構化查詢語言(SQL)的全面介紹。作者沒有試圖去遵循任何商業(yè)數據庫產品的特有細節(jié),而是強調了對所有這些產品都通用的概念。在掌握了這些內容之后,讀者就可以在任何與SQL兼容的關系數據庫中去實現應用了。在講解面向對象數據庫和演繹數據庫時各占用了兩章的篇幅:第一章描述模型本身,即講解數據項以及它們之間聯(lián)系和約束的技術;然后在第二章中說明如何針對這種數據庫來組織查詢;接下來,限于近年來網狀和層次模型的使用范圍,對它們分別使用一章的篇幅來做介紹,因為這兩種模型已被關系模型所取代了。不過,這五種模型既相互區(qū)別,也彼此聯(lián)系,揭示了數據庫模型研究的發(fā)展歷程。最后,對這五種數據庫模型進行了清晰的比較。第二部分介紹了物理數據存儲的問題,以使本書體系完整。許多學校在講授數據庫課程時都包含了文件部分,尤其是關于記錄存儲的概念,所以本書也相應地適應了這些需要。第三部分涉及到了應用設計問題。首先作為語義數據庫模型的例子,介紹了實體-聯(lián)系圖(ER圖)和對象建模技術(OMT),這有助于應用設計者對應用實體及其聯(lián)系進行識別和結構化。在第一部分中,使用了簡單的ER圖來說明貫穿于各種不同數據庫模型的應用示例。在學習了這些數據庫模型后,學生會進一步想了解ER圖的高級特性,例如類層次和相關問題。所以,在第三部分中討論了這些問題。然后,使用兩章的篇幅對函數依賴和連接依賴進行了分析。這些技術說明了應如何選擇相關的表以加強特定約束。本書的第四部分只有一章,在這一章中,對通常在性能問題中所選的高級主題進行了分組,就并發(fā)性、恢復、安全性和查詢優(yōu)化等問題進行了簡要介紹。對于本書中的大部分例證,都使用了一個單一、簡單的例子。所以讀者在學習一種新的數據庫模型時,會遇到相同或相似的應用。所有這些模型都簡單地說明了組織數據元素之間的聯(lián)系和約束的不同方法。這個通用的應用示例強調了這五種模型之間的相似性。通過重復使用某種說明大部分數據庫查詢的模式,進一步強調了這一思想。本書的目標、使用方法和預備知識本書可以作為大學數據庫課程的教材,為高年級課程提供充足的資料。在閱讀本書之前,需要具備以下知識:●程序設計:程序語言中的數據結構和算法表達。本書用C語言來說明算法,但是沒有支持堆棧、列表、隊列等常用操作的程序。如果讀者理解塊結構化的程序語言,即使不是C語言,即使不會寫,也應該能夠讀懂這些算法?!裰^詞演算:盡管本書對謂詞演算有一個簡要的回顧,但讀者還是應該有這方面的預備知識?!窦侠碚摵湍承╇x散數學問題:布爾代數、關系和歸納證明?!駭嘌院脱h(huán)不變式:書中采用這些方法來證明算法的正確性?!癯醪降慕M合數學和概率理論:在第二部分的Hash表討論中使用了一些這兩方面的知識。在講授數據庫課程時可以靈活安排教學內容。因為我的學生已經學習過第二部分中文件的內容,所以我用一個學期的6%的時間來講授第一部分的模型和語言,跳過了第二部分,然后在剩余的4%的時間里盡可能多地講述第三部分的內容。在授課時,首先講述關系模型導言和有關內容,包括較復雜的SQL的內容。然后講解面向對象和演繹模型。因為我強調數據庫的通用特征,所以學生應學習怎樣得出關系模型和這些新模型之間的相似性,這樣就可以用更簡短的講義來講述它們之間的關系。將過去使用的模型作為課外讀物留給學生自學,這樣就需要一個較短的總結來將網狀或層次模型與課上講過的模型做對比。在深入研究函數依賴和連接依賴的數學理論之前,我在第二部分的授課中包括了實體-聯(lián)系概念的所有特征。因為對數學知識的要求更加苛刻,所以這一部分的速度慢了下來。在講解時介紹了主要結論,并且進行了詳細的推導。以這種方式使用這本教材,我通常都是在連接依賴這一章的某一部分結束這門課程。即使講授全部內容,教師也不必覆蓋教材中的每一個細節(jié)。盡管我沒有講授教材中的全部細節(jié),但我估計講授完整的這本書可能需要一學年。對于教學方法,我的建議是首先選擇重點章,然后進一步選擇這一章的重點內容和相應示例并指導學生完全掌握所選章節(jié)。如果在教授數據庫課程時需要講解第二部分的文件概念,我推薦用與上面相同的方式來講授這些模型,但第三部分的數據庫設計方面的內容可以相應縮減。如果課程要求開設實驗來使用一種商業(yè)數據庫產品,那么可以上完三分之一課時后開始實驗,也就是在講完第5章之后。我在開設實驗課程時要求學生創(chuàng)建一個包含五個表的小型關系數據庫(與書中的通用應用示例相似),并針對這個數據庫來實現查詢。最后要說明的是,這本書也適合那些既熟悉關系數據庫技術又打算學習面向對象和演繹模型的數據庫工作者。第1章到第6章是對關系數據庫的全面回顧,并以向其他模型引申的方式來解釋這些特征。第7章到第1章繼續(xù)講述后關系模型,并討論了演繹和面向對象數據庫。表達風格本書的表達風格與大部分數據庫教材不同。首先,提供了更多的解釋和示例。其次,強調通用概念,而不是已有商業(yè)產品的特殊細節(jié)。與其他教材的相同之處是,選擇了C語言來描述算法,并且使用C代碼片段來解釋一些非算法的內容,例如嵌入式SQL和網狀查詢。這樣,大部分學生會通過數據庫課程在一定程度上進一步熟悉C語言。所采用的示例都是簡短的摘錄,而不是完整的程序,但也足以說明概念了。最后,完成此書時所參考的全部文獻統(tǒng)一列在了本書的結尾處,而不是分散在每一章的末尾。