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