本書是數(shù)據(jù)庫領域的經(jīng)典著作,內(nèi)容系統(tǒng)、全面、實用,被世界多所大學選為數(shù)據(jù)庫相關課程的教材。中文版分為基礎篇和進階篇,分別對應原書第一—五部分和第六—九部分。本書為基礎篇,主要內(nèi)容包括:數(shù)據(jù)庫系統(tǒng)與數(shù)據(jù)庫設計的基礎知識;關系模型與語言;數(shù)據(jù)庫分析與設計的主要技術;數(shù)據(jù)庫設計方法學;以及現(xiàn)代數(shù)據(jù)庫管理相關專題,涵蓋安全問題、法律與道德問題、事務管理和查詢處理。
前 言
背景在過去的30年中,數(shù)據(jù)庫的研究帶來了巨大的生產(chǎn)力,使得數(shù)據(jù)庫系統(tǒng)成為軟件工程領域最重要的成果。目前,數(shù)據(jù)庫作為信息系統(tǒng)的基本框架,已從根本上改變了許多公司的運作方式。特別是在最近幾年里,隨著這項技術本身的發(fā)展,產(chǎn)生了一些功能更強大、使用更方便的系統(tǒng)。這使得數(shù)據(jù)庫系統(tǒng)變得越來越普及,用戶類型也越來越廣泛。遺憾的是,正是由于數(shù)據(jù)庫系統(tǒng)的簡單性,許多用戶有可能尚缺乏必要的知識,還不懂得如何開發(fā)正確且高效的系統(tǒng),就開始創(chuàng)建數(shù)據(jù)庫及其應用程序了。這樣很可能導致所謂的 “軟件危機”(software crisis,有時也稱為“軟件抑郁”(software depression))的延續(xù)。
編寫本書的最初動因是我們在工業(yè)界的工作經(jīng)歷,當時我們?yōu)樾萝浖到y(tǒng)中數(shù)據(jù)庫的設計提供咨詢,間或也解決遺留系統(tǒng)中存在的種種問題。進入學術界后,我們從另一類用戶—學生那里發(fā)現(xiàn)了類似的問題。因此,本書的目標就是給出一本教程,盡可能清楚地介紹數(shù)據(jù)庫的基礎理論,并給出一套既能為專業(yè)技術人員亦能為非技術人員所用的數(shù)據(jù)庫設計方法學。
本書針對當前主流的商用產(chǎn)品—關系數(shù)據(jù)庫管理系統(tǒng)(DBMS)給出的設計方法學,已在學術界和工業(yè)界測試和使用了許多年。它包括三個主要階段:數(shù)據(jù)庫的概念設計、邏輯設計和物理設計。第一個階段在不考慮任何物理因素的前提下設計概念數(shù)據(jù)模型,得到的數(shù)據(jù)模型在第二階段被細化為邏輯數(shù)據(jù)模型,細化過程主要是去除在關系系統(tǒng)中無法表示的結(jié)構。在第三階段,邏輯數(shù)據(jù)模型被轉(zhuǎn)換成針對目標DBMS的物理設計,物理設計階段主要考慮如何設計存儲結(jié)構和訪問方法,以便有效并安全地訪問存儲在輔存中的數(shù)據(jù)庫。
該方法學按階段被分為一系列步驟。對于缺少經(jīng)驗的設計者,最好按步驟進行設計,這里所提供的指南可幫助你完成整個過程。對于有經(jīng)驗的設計者,該方法學的指導作用顯然會弱化,但經(jīng)?捎糜陂_發(fā)框架和檢查列表。為了幫助讀者學習使用上述方法學并理解其要點,整個方法學的描述中始終貫穿一個完整的DreamHome案例研究。附錄B還給出了另外三個案例,供讀者自行研究。
UML(統(tǒng)一建模語言)越來越多的公司都在規(guī)范各自的數(shù)據(jù)建模方法,即選擇一種特定的建模方法并在整個數(shù)據(jù)庫開發(fā)項目中始終如一地使用它。一種在數(shù)據(jù)庫概念設計和邏輯設計階段較為通用的高級數(shù)據(jù)模型是ER(實體-聯(lián)系)模型,這也是本書采用的模型。由于當前還沒有表示ER模型的標準方法,因此大部分書籍在描述關系DBMS的數(shù)據(jù)庫設計時,常常使用下述兩種表示方法之一:
Chen氏表示方法,即用矩形表示實體,用菱形表示聯(lián)系,用線段連接矩形和菱形。
Crow Feet(鴉爪)表示方法,仍用矩形表示實體,用實體間的連線表示聯(lián)系,在一對多聯(lián)系連線的多端有一個鴉爪標記。
當前,這兩種表示方法都有計算機輔助軟件工程(CASE)工具。然而,它們都難于使用和解釋。本書的較早版本曾使用Chen氏表示方法,而在隨后培生教育出版集團進行的一次問卷調(diào)查中,比較一致的意見是應該使用最新的稱為UML(Unified Modeling Language,統(tǒng)一建模語言)的面向?qū)ο蠼UZ言。UML表示方法結(jié)合了面向?qū)ο笤O計三大流派的成分:Rumbaugh的OMT建模語言,Booch的面向?qū)ο蠓治龊兔嫦驅(qū)ο笤O計,以及Jacobson的Objectory。
換用表示方法主要有以下三個原因:(1)UML正成為一種工業(yè)標準,例如,對象管理組(OMG)已經(jīng)采納UML作為對象方法的標準表示方法;(2)UML表達清楚并易于使用;(3) UML目前已被學術界用于面向?qū)ο蠓治雠c設計的教學,在數(shù)據(jù)庫模塊的教學中也使用UML將會更加一致。因此,在這個版本中,我們將采用UML的類圖作為ER模型的表示方法。讀者將會發(fā)現(xiàn)這種表示方法更加容易理解和使用。
第6版的更新之處擴展了第3章“數(shù)據(jù)庫的結(jié)構與Web”,增加了云計算。
修改了第21章“數(shù)據(jù)管理中的職業(yè)、法律與道德問題”。
增加了“數(shù)據(jù)倉庫與時態(tài)數(shù)據(jù)庫”(31.5節(jié))。
每章后增加了新的思考題和習題。
修改了與SQL相關的章節(jié),全面反映2011年公布的新標準SQL:2011。
修訂了第26章“復制與移動數(shù)據(jù)庫”。
修改了關于Web-DBMS集成和XML的章節(jié)。
與Oracle相關的內(nèi)容一律修改為針對Oracle 11g。
讀者對象本書可作為本科生數(shù)據(jù)庫管理或數(shù)據(jù)庫設計的導論性教材,也可作為研究生或高年級本科生相關課程的教材,學時可分為一到兩個學期。通常信息系統(tǒng)、商業(yè)IT或計算機科學等專業(yè)都包含這類課程。
本書還可以作為一些IT專業(yè)人士的參考書,如系統(tǒng)分析和設計人員、應用程序開發(fā)人員、系統(tǒng)程序員、數(shù)據(jù)庫從業(yè)人員及獨立的自學者。隨著當今數(shù)據(jù)庫系統(tǒng)的廣泛使用,這些專業(yè)人士可能來自于需要數(shù)據(jù)庫的任何類型的公司。
讀者在學習關于物理數(shù)據(jù)庫設計的第18章和關于查詢處理的第23章之前,如果對附錄F中介紹的文件組織和數(shù)據(jù)結(jié)構相關概念有清楚的了解,那么將會有所幫助。理想的情況是這些背景知識已從前導課程中獲得。如果不具備這個條件,則可以在開始數(shù)據(jù)庫課程后,學完第1章立即學習附錄F。
......
alt="" />
出版者的話
譯者序
前言
第一部分 背景
第1章 數(shù)據(jù)庫簡介2
1.1 引言3
1.2 傳統(tǒng)的基于文件的系統(tǒng)4
1.2.1 基于文件的方法5
1.2.2 基于文件方法的局限性8
1.3 數(shù)據(jù)庫方法10
1.3.1 數(shù)據(jù)庫10
1.3.2 數(shù)據(jù)庫管理系統(tǒng)(DBMS)11
1.3.3。〝(shù)據(jù)庫)應用程序12
1.3.4 DBMS環(huán)境的組成部分13
1.3.5 數(shù)據(jù)庫設計:范型改變15
1.4 數(shù)據(jù)庫環(huán)境中的各種角色16
1.4.1 數(shù)據(jù)管理員和數(shù)據(jù)庫管理員16
1.4.2 數(shù)據(jù)庫設計人員16
1.4.3 應用開發(fā)人員17
1.4.4 終端用戶17
1.5 數(shù)據(jù)庫管理系統(tǒng)的歷史17
1.6 DBMS的優(yōu)點和缺點20
本章小結(jié)23
思考題23
習題24
擴展閱讀25
第2章 數(shù)據(jù)庫環(huán)境26
2.1 ANSI-SPARC三層體系結(jié)構27
2.1.1 外部層28
2.1.2 概念層28
2.1.3 內(nèi)部層28
2.1.4 模式、映射和實例29
2.1.5 數(shù)據(jù)獨立性30
2.2 數(shù)據(jù)庫語言30
2.2.1 數(shù)據(jù)定義語言(DDL)31
2.2.2 數(shù)據(jù)操作語言(DML)31
2.2.3 第四代語言32
2.3 數(shù)據(jù)模型和概念建模33
2.3.1 基于對象的數(shù)據(jù)模型34
2.3.2 基于記錄的數(shù)據(jù)模型34
2.3.3 物理數(shù)據(jù)模型36
2.3.4 概念建模36
2.4 DBMS的功能36
本章小結(jié)39
思考題40
習題40
擴展閱讀41
第3章 數(shù)據(jù)庫的結(jié)構與Web42
3.1 多用戶DBMS結(jié)構42
3.1.1 遠程處理43
3.1.2 文件服務器結(jié)構43
3.1.3 傳統(tǒng)的兩層客戶-服務器結(jié)構44
3.1.4 三層客戶-服務器結(jié)構45
3.1.5 N層客戶-服務器結(jié)構47
3.1.6 中間件47
3.1.7 事務處理監(jiān)視器49
3.2 Web 服務與面向服務的結(jié)構50
3.2.1 Web 服務50
3.2.2 面向服務的結(jié)構(SOA)51
3.3 分布式DBMS53
3.4 數(shù)據(jù)倉庫54
3.5 云計算56
3.5.1 云計算的好處與風險58
3.5.2 基于云的數(shù)據(jù)庫方案60
3.6 DBMS的組件63
3.7 Oracle的體系結(jié)構65
3.7.1 Oracle的邏輯數(shù)據(jù)庫結(jié)構65
3.7.2 Oracle的物理數(shù)據(jù)庫結(jié)構67
本章小結(jié)71
思考題71
習題72
擴展閱讀72
第二部分 關系模型與語言
第4章 關系模型74
4.1 關系模型簡史74
4.2 基本術語76
4.2.1 關系數(shù)據(jù)結(jié)構76
4.2.2 數(shù)學中的關系78
4.2.3 數(shù)據(jù)庫中的關系79
4.2.4 關系的性質(zhì)79
4.2.5 關系關鍵字80
4.2.6 關系數(shù)據(jù)庫模式的表示81
4.3 完整性約束83
4.3.1 空83
4.3.2實體完整性83
4.3.3引用完整性84
4.3.4一般性約束84
4.4視圖84
4.4.1術語85
4.4.2視圖的用途85
4.4.3視圖的更新86
本章小結(jié)86
思考題86
習題87
擴展閱讀87
第5章 關系代數(shù)與關系演算88
5.1關系代數(shù)88
5.1.1一元運算90
5.1.2集合運算91
5.1.3連接運算93
5.1.4除法運算96
5.1.5聚集運算和分組運算96
5.1.6 關系代數(shù)運算小結(jié)97
5.2 關系演算98
5.2.1 元組關系演算99
5.2.2 域關系演算101
5.3 其他語言103
本章小結(jié)103
思考題104
習題104
擴展閱讀106
第6章 SQL:數(shù)據(jù)操作107
6.1 SQL簡介108
6.1.1 SQL的目標108
6.1.2 SQL的歷史109
6.1.3 SQL的重要性110
6.1.4 術語110
6.2 書寫SQL命令110
6.3 數(shù)據(jù)操作111
6.3.1 簡單查詢112
6.3.2 查詢結(jié)果排序(ORDER BY子句)118
6.3.3 使用SQL聚集函數(shù)119
6.3.4 查詢結(jié)果分組(GROUP BY子句) 121
6.3.5 子查詢123
6.3.6 ANY和ALL125
6.3.7 多表查詢126
6.3.8 EXISTS和NOT EXISTS131
6.3.9 合并結(jié)果表(UNION、INTERSECT和EXCEPT)132
6.3.10 數(shù)據(jù)庫更新 133
本章小結(jié)136
思考題137
習題137
第7章 SQL:數(shù)據(jù)定義140
7.1 ISO SQL數(shù)據(jù)類型141
7.1.1 SQL標識符141
7.1.2 SQL標量數(shù)據(jù)類型 141
7.2 完整性增強特性145
7.2.1 必須有值的數(shù)據(jù)145
7.2.2 域約束145
7.2.3 實體完整性146
7.2.4 引用完整性147
7.2.5 一般性約束148
7.3 數(shù)據(jù)定義148
7.3.1 創(chuàng)建數(shù)據(jù)庫149
7.3.2 創(chuàng)建表(CREATE TABLE)149
7.3.3 修改表定義(ALTER TABLE) 152
7.3.4 刪除表(DROP TABLE)153
7.3.5 創(chuàng)建索引(CREATE INDEX) 153
7.3.6 刪除索引(DROP INDEX)154
7.4 視圖154
7.4.1 創(chuàng)建視圖(CREATE VIEW)154
7.4.2 刪除視圖(DROP VIEW)156
7.4.3 視圖分解157
7.4.4 視圖的局限性157
7.4.5 視圖的可更新性158
7.4.6 WITH CHECK OPTION159
7.4.7 視圖的優(yōu)缺點160
7.4.8 視圖物化161
7.5 事務162
7.6 自主訪問控制163
7.6.1 授予其他用戶權限(GRANT)164
7.6.2 撤銷用戶權限(REVOKE)166
本章小結(jié)167
思考題168
習題168
第8章 高級SQL171
8.1 SQL編程語言171
8.1.1 聲明172
8.1.2 賦值173
8.1.3 控制語句173
8.1.4 PL/SQL的異常175
8.1.5 PL/SQL的游標176
8.2 子程序、存儲過程、函數(shù)和包178
8.3 觸發(fā)器179
8.4 遞歸184
本章小結(jié)185
思考題185
習題186
擴展閱讀186
第9章 對象關系DBMS187
9.1 高級數(shù)據(jù)庫應用188
9.2 RDBMS的缺點191
9.3 在關系數(shù)據(jù)庫中存儲對象195
9.3.1 將類映射為關系196
9.3.2 訪問關系數(shù)據(jù)庫中的對象197
9.4 對象關系數(shù)據(jù)庫系統(tǒng)簡介198
9.5 SQL:2011200
9.5.1 行類型201
9.5.2 用戶自定義類型201
9.5.3 子類型和超類型204
9.5.4 用戶自定義例程206
9.5.5 多態(tài)性207
9.5.6 引用類型和對象標識208
9.5.7 創(chuàng)建表208
9.5.8 數(shù)據(jù)查詢210
9.5.9 集類型211
9.5.10 類型視圖214
9.5.11 持久化存儲模塊215
9.5.12 觸發(fā)器215
9.5.13 大對象217
9.5.14 遞歸219
9.6 Oracle中面向?qū)ο蟮臄U展219
9.6.1 用戶自定義數(shù)據(jù)類型219
9.6.2 操作對象表223
9.6.3 對象視圖224
9.6.4 權限225
本章小結(jié)226
思考題226
習題226
擴展閱讀227
第三部分 數(shù)據(jù)庫分析與設計
第10章 數(shù)據(jù)庫系統(tǒng)開發(fā)生命周期230
10.1 信息系統(tǒng)生命周期231
10.2 數(shù)據(jù)庫系統(tǒng)開發(fā)生命周期231
10.3 數(shù)據(jù)庫規(guī)劃233
10.4 系統(tǒng)定義233
10.5 需求收集與分析234
10.5.1 集中式方法235
10.5.2 視圖集成方法235
10.6 數(shù)據(jù)庫設計237
10.6.1 數(shù)據(jù)庫設計方法237
10.6.2 數(shù)據(jù)建模238
10.6.3 數(shù)據(jù)庫設計的階段劃分238
10.7 DBMS選型240
10.8 應用程序設計243
10.8.1 事務設計243
10.8.2 用戶界面設計指南244
10.9 建立原型系統(tǒng)246
10.10 實現(xiàn)246
10.11 數(shù)據(jù)轉(zhuǎn)換與加載246
10.12 測試247
10.13 運行維護247
10.14 CASE工具248
本章小結(jié)249
思考題250
習題250
擴展閱讀251
第11章 數(shù)據(jù)庫分析與DreamHome案例研究252
11.1 使用實況發(fā)現(xiàn)技術的時機253
11.2 收集實況的類型253
11.3 實況發(fā)現(xiàn)技術 254
11.3.1 分析文檔資料254
11.3.2 面談254
11.3.3 觀察企業(yè)的運作255
11.3.4 研究256
11.3.5 問卷調(diào)查256
11.4 使用實況發(fā)現(xiàn)技術的實例256
11.4.1 DreamHome案例研究—概述257
11.4.2 DreamHome案例研究—數(shù)據(jù)庫規(guī)劃260
11.4.3 DreamHome案例研究—系統(tǒng)定義264
11.4.4 DreamHome案例研究—需求收集與分析266
11.4.5 DreamHome案例研究—數(shù)據(jù)庫設計271
本章小結(jié)271
思考題271
習題271
擴展閱讀272
第12章 實體-聯(lián)系建模273
12.1 實體類型 274
12.2 聯(lián)系類型275
12.2.1 聯(lián)系類型的度276
12.2.2 遞歸聯(lián)系278
12.3 屬性 279
12.3.1 簡單屬性和組合屬性279
12.3.2 單值屬性和多值屬性279
12.3.3 導出屬性 280
12.3.4 關鍵字 280
12.4 強實體類型與弱實體類型282
12.5 聯(lián)系的屬性282
12.6 結(jié)構化約束283
12.6.1 一對一(1:1)聯(lián)系283
12.6.2 一對多(1:*)聯(lián)系284
12.6.3 多對多(*:*)聯(lián)系285
12.6.4 復雜聯(lián)系的多重性287
12.6.5 基數(shù)約束和參與性約束288
12.7 ER模型的問題289
12.7.1 扇形陷阱289
12.7.2 斷層陷阱291
本章小結(jié)292
思考題293
習題293
第13章 增強的實體-聯(lián)系建模295
13.1 特殊化/泛化295
13.1.1 超類和子類296
13.1.2 超類/子類聯(lián)系296
13.1.3 屬性的繼承297
13.1.4 特殊化過程297
13.1.5 泛化過程298
13.1.6 特殊化/泛化的約束300
13.1.7 基于DreamHome案例研究的Branch視圖特殊化/泛化建模示例301
13.2 聚合304
13.3 組合305
本章小結(jié)306
......