本書是數(shù)據(jù)庫領(lǐng)域的經(jīng)典著作,內(nèi)容系統(tǒng)、全面、實用,被世界多所大學(xué)選為數(shù)據(jù)庫相關(guān)課程的教材。中文版分為基礎(chǔ)篇和進階篇,分別對應(yīng)原書第一—五部分和第六—九部分。本書為基礎(chǔ)篇,主要內(nèi)容包括:數(shù)據(jù)庫系統(tǒng)與數(shù)據(jù)庫設(shè)計的基礎(chǔ)知識;關(guān)系模型與語言;數(shù)據(jù)庫分析與設(shè)計的主要技術(shù);數(shù)據(jù)庫設(shè)計方法學(xué);以及現(xiàn)代數(shù)據(jù)庫管理相關(guān)專題,涵蓋安全問題、法律與道德問題、事務(wù)管理和查詢處理。
前 言
背景在過去的30年中,數(shù)據(jù)庫的研究帶來了巨大的生產(chǎn)力,使得數(shù)據(jù)庫系統(tǒng)成為軟件工程領(lǐng)域最重要的成果。目前,數(shù)據(jù)庫作為信息系統(tǒng)的基本框架,已從根本上改變了許多公司的運作方式。特別是在最近幾年里,隨著這項技術(shù)本身的發(fā)展,產(chǎn)生了一些功能更強大、使用更方便的系統(tǒng)。這使得數(shù)據(jù)庫系統(tǒng)變得越來越普及,用戶類型也越來越廣泛。遺憾的是,正是由于數(shù)據(jù)庫系統(tǒng)的簡單性,許多用戶有可能尚缺乏必要的知識,還不懂得如何開發(fā)正確且高效的系統(tǒng),就開始創(chuàng)建數(shù)據(jù)庫及其應(yīng)用程序了。這樣很可能導(dǎo)致所謂的 “軟件危機”(software crisis,有時也稱為“軟件抑郁”(software depression))的延續(xù)。
編寫本書的最初動因是我們在工業(yè)界的工作經(jīng)歷,當(dāng)時我們?yōu)樾萝浖到y(tǒng)中數(shù)據(jù)庫的設(shè)計提供咨詢,間或也解決遺留系統(tǒng)中存在的種種問題。進入學(xué)術(shù)界后,我們從另一類用戶—學(xué)生那里發(fā)現(xiàn)了類似的問題。因此,本書的目標(biāo)就是給出一本教程,盡可能清楚地介紹數(shù)據(jù)庫的基礎(chǔ)理論,并給出一套既能為專業(yè)技術(shù)人員亦能為非技術(shù)人員所用的數(shù)據(jù)庫設(shè)計方法學(xué)。
本書針對當(dāng)前主流的商用產(chǎn)品—關(guān)系數(shù)據(jù)庫管理系統(tǒng)(DBMS)給出的設(shè)計方法學(xué),已在學(xué)術(shù)界和工業(yè)界測試和使用了許多年。它包括三個主要階段:數(shù)據(jù)庫的概念設(shè)計、邏輯設(shè)計和物理設(shè)計。第一個階段在不考慮任何物理因素的前提下設(shè)計概念數(shù)據(jù)模型,得到的數(shù)據(jù)模型在第二階段被細化為邏輯數(shù)據(jù)模型,細化過程主要是去除在關(guān)系系統(tǒng)中無法表示的結(jié)構(gòu)。在第三階段,邏輯數(shù)據(jù)模型被轉(zhuǎn)換成針對目標(biāo)DBMS的物理設(shè)計,物理設(shè)計階段主要考慮如何設(shè)計存儲結(jié)構(gòu)和訪問方法,以便有效并安全地訪問存儲在輔存中的數(shù)據(jù)庫。
該方法學(xué)按階段被分為一系列步驟。對于缺少經(jīng)驗的設(shè)計者,最好按步驟進行設(shè)計,這里所提供的指南可幫助你完成整個過程。對于有經(jīng)驗的設(shè)計者,該方法學(xué)的指導(dǎo)作用顯然會弱化,但經(jīng)?捎糜陂_發(fā)框架和檢查列表。為了幫助讀者學(xué)習(xí)使用上述方法學(xué)并理解其要點,整個方法學(xué)的描述中始終貫穿一個完整的DreamHome案例研究。附錄B還給出了另外三個案例,供讀者自行研究。
UML(統(tǒng)一建模語言)越來越多的公司都在規(guī)范各自的數(shù)據(jù)建模方法,即選擇一種特定的建模方法并在整個數(shù)據(jù)庫開發(fā)項目中始終如一地使用它。一種在數(shù)據(jù)庫概念設(shè)計和邏輯設(shè)計階段較為通用的高級數(shù)據(jù)模型是ER(實體-聯(lián)系)模型,這也是本書采用的模型。由于當(dāng)前還沒有表示ER模型的標(biāo)準(zhǔn)方法,因此大部分書籍在描述關(guān)系DBMS的數(shù)據(jù)庫設(shè)計時,常常使用下述兩種表示方法之一:
Chen氏表示方法,即用矩形表示實體,用菱形表示聯(lián)系,用線段連接矩形和菱形。
Crow Feet(鴉爪)表示方法,仍用矩形表示實體,用實體間的連線表示聯(lián)系,在一對多聯(lián)系連線的多端有一個鴉爪標(biāo)記。
當(dāng)前,這兩種表示方法都有計算機輔助軟件工程(CASE)工具。然而,它們都難于使用和解釋。本書的較早版本曾使用Chen氏表示方法,而在隨后培生教育出版集團進行的一次問卷調(diào)查中,比較一致的意見是應(yīng)該使用最新的稱為UML(Unified Modeling Language,統(tǒng)一建模語言)的面向?qū)ο蠼UZ言。UML表示方法結(jié)合了面向?qū)ο笤O(shè)計三大流派的成分:Rumbaugh的OMT建模語言,Booch的面向?qū)ο蠓治龊兔嫦驅(qū)ο笤O(shè)計,以及Jacobson的Objectory。
換用表示方法主要有以下三個原因:(1)UML正成為一種工業(yè)標(biāo)準(zhǔn),例如,對象管理組(OMG)已經(jīng)采納UML作為對象方法的標(biāo)準(zhǔn)表示方法;(2)UML表達清楚并易于使用;(3) UML目前已被學(xué)術(shù)界用于面向?qū)ο蠓治雠c設(shè)計的教學(xué),在數(shù)據(jù)庫模塊的教學(xué)中也使用UML將會更加一致。因此,在這個版本中,我們將采用UML的類圖作為ER模型的表示方法。讀者將會發(fā)現(xiàn)這種表示方法更加容易理解和使用。
第6版的更新之處擴展了第3章“數(shù)據(jù)庫的結(jié)構(gòu)與Web”,增加了云計算。
修改了第21章“數(shù)據(jù)管理中的職業(yè)、法律與道德問題”。
增加了“數(shù)據(jù)倉庫與時態(tài)數(shù)據(jù)庫”(31.5節(jié))。
每章后增加了新的思考題和習(xí)題。
修改了與SQL相關(guān)的章節(jié),全面反映2011年公布的新標(biāo)準(zhǔn)SQL:2011。
修訂了第26章“復(fù)制與移動數(shù)據(jù)庫”。
修改了關(guān)于Web-DBMS集成和XML的章節(jié)。
與Oracle相關(guān)的內(nèi)容一律修改為針對Oracle 11g。
讀者對象本書可作為本科生數(shù)據(jù)庫管理或數(shù)據(jù)庫設(shè)計的導(dǎo)論性教材,也可作為研究生或高年級本科生相關(guān)課程的教材,學(xué)時可分為一到兩個學(xué)期。通常信息系統(tǒng)、商業(yè)IT或計算機科學(xué)等專業(yè)都包含這類課程。
本書還可以作為一些IT專業(yè)人士的參考書,如系統(tǒng)分析和設(shè)計人員、應(yīng)用程序開發(fā)人員、系統(tǒng)程序員、數(shù)據(jù)庫從業(yè)人員及獨立的自學(xué)者。隨著當(dāng)今數(shù)據(jù)庫系統(tǒng)的廣泛使用,這些專業(yè)人士可能來自于需要數(shù)據(jù)庫的任何類型的公司。
讀者在學(xué)習(xí)關(guān)于物理數(shù)據(jù)庫設(shè)計的第18章和關(guān)于查詢處理的第23章之前,如果對附錄F中介紹的文件組織和數(shù)據(jù)結(jié)構(gòu)相關(guān)概念有清楚的了解,那么將會有所幫助。理想的情況是這些背景知識已從前導(dǎo)課程中獲得。如果不具備這個條件,則可以在開始數(shù)據(jù)庫課程后,學(xué)完第1章立即學(xué)習(xí)附錄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ù)庫)應(yīng)用程序12
1.3.4 DBMS環(huán)境的組成部分13
1.3.5 數(shù)據(jù)庫設(shè)計:范型改變15
1.4 數(shù)據(jù)庫環(huán)境中的各種角色16
1.4.1 數(shù)據(jù)管理員和數(shù)據(jù)庫管理員16
1.4.2 數(shù)據(jù)庫設(shè)計人員16
1.4.3 應(yīng)用開發(fā)人員17
1.4.4 終端用戶17
1.5 數(shù)據(jù)庫管理系統(tǒng)的歷史17
1.6 DBMS的優(yōu)點和缺點20
本章小結(jié)23
思考題23
習(xí)題24
擴展閱讀25
第2章 數(shù)據(jù)庫環(huán)境26
2.1 ANSI-SPARC三層體系結(jié)構(gòu)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
習(xí)題40
擴展閱讀41
第3章 數(shù)據(jù)庫的結(jié)構(gòu)與Web42
3.1 多用戶DBMS結(jié)構(gòu)42
3.1.1 遠程處理43
3.1.2 文件服務(wù)器結(jié)構(gòu)43
3.1.3 傳統(tǒng)的兩層客戶-服務(wù)器結(jié)構(gòu)44
3.1.4 三層客戶-服務(wù)器結(jié)構(gòu)45
3.1.5 N層客戶-服務(wù)器結(jié)構(gòu)47
3.1.6 中間件47
3.1.7 事務(wù)處理監(jiān)視器49
3.2 Web 服務(wù)與面向服務(wù)的結(jié)構(gòu)50
3.2.1 Web 服務(wù)50
3.2.2 面向服務(wù)的結(jié)構(gòu)(SOA)51
3.3 分布式DBMS53
3.4 數(shù)據(jù)倉庫54
3.5 云計算56
3.5.1 云計算的好處與風(fēng)險58
3.5.2 基于云的數(shù)據(jù)庫方案60
3.6 DBMS的組件63
3.7 Oracle的體系結(jié)構(gòu)65
3.7.1 Oracle的邏輯數(shù)據(jù)庫結(jié)構(gòu)65
3.7.2 Oracle的物理數(shù)據(jù)庫結(jié)構(gòu)67
本章小結(jié)71
思考題71
習(xí)題72
擴展閱讀72
第二部分 關(guān)系模型與語言
第4章 關(guān)系模型74
4.1 關(guān)系模型簡史74
4.2 基本術(shù)語76
4.2.1 關(guān)系數(shù)據(jù)結(jié)構(gòu)76
4.2.2 數(shù)學(xué)中的關(guān)系78
4.2.3 數(shù)據(jù)庫中的關(guān)系79
4.2.4 關(guān)系的性質(zhì)79
4.2.5 關(guān)系關(guān)鍵字80
4.2.6 關(guān)系數(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術(shù)語85
4.4.2視圖的用途85
4.4.3視圖的更新86
本章小結(jié)86
思考題86
習(xí)題87
擴展閱讀87
第5章 關(guān)系代數(shù)與關(guān)系演算88
5.1關(guān)系代數(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 關(guān)系代數(shù)運算小結(jié)97
5.2 關(guān)系演算98
5.2.1 元組關(guān)系演算99
5.2.2 域關(guān)系演算101
5.3 其他語言103
本章小結(jié)103
思考題104
習(xí)題104
擴展閱讀106
第6章 SQL:數(shù)據(jù)操作107
6.1 SQL簡介108
6.1.1 SQL的目標(biāo)108
6.1.2 SQL的歷史109
6.1.3 SQL的重要性110
6.1.4 術(shù)語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
習(xí)題137
第7章 SQL:數(shù)據(jù)定義140
7.1 ISO SQL數(shù)據(jù)類型141
7.1.1 SQL標(biāo)識符141
7.1.2 SQL標(biāo)量數(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 事務(wù)162
7.6 自主訪問控制163
7.6.1 授予其他用戶權(quán)限(GRANT)164
7.6.2 撤銷用戶權(quán)限(REVOKE)166
本章小結(jié)167
思考題168
習(xí)題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的游標(biāo)176
8.2 子程序、存儲過程、函數(shù)和包178
8.3 觸發(fā)器179
8.4 遞歸184
本章小結(jié)185
思考題185
習(xí)題186
擴展閱讀186
第9章 對象關(guān)系DBMS187
9.1 高級數(shù)據(jù)庫應(yīng)用188
9.2 RDBMS的缺點191
9.3 在關(guān)系數(shù)據(jù)庫中存儲對象195
9.3.1 將類映射為關(guān)系196
9.3.2 訪問關(guān)系數(shù)據(jù)庫中的對象197
9.4 對象關(guān)系數(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 引用類型和對象標(biāo)識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 權(quán)限225
本章小結(jié)226
思考題226
習(xí)題226
擴展閱讀227
第三部分 數(shù)據(jù)庫分析與設(shè)計
第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ù)庫設(shè)計237
10.6.1 數(shù)據(jù)庫設(shè)計方法237
10.6.2 數(shù)據(jù)建模238
10.6.3 數(shù)據(jù)庫設(shè)計的階段劃分238
10.7 DBMS選型240
10.8 應(yīng)用程序設(shè)計243
10.8.1 事務(wù)設(shè)計243
10.8.2 用戶界面設(shè)計指南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
習(xí)題250
擴展閱讀251
第11章 數(shù)據(jù)庫分析與DreamHome案例研究252
11.1 使用實況發(fā)現(xiàn)技術(shù)的時機253
11.2 收集實況的類型253
11.3 實況發(fā)現(xiàn)技術(shù) 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)技術(shù)的實例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ù)庫設(shè)計271
本章小結(jié)271
思考題271
習(xí)題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 導(dǎo)出屬性 280
12.3.4 關(guān)鍵字 280
12.4 強實體類型與弱實體類型282
12.5 聯(lián)系的屬性282
12.6 結(jié)構(gòu)化約束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 復(fù)雜聯(lián)系的多重性287
12.6.5 基數(shù)約束和參與性約束288
12.7 ER模型的問題289
12.7.1 扇形陷阱289
12.7.2 斷層陷阱291
本章小結(jié)292
思考題293
習(xí)題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
......