新書推薦:
《
安全感是内心长出的盔甲
》
售價:NT$
305.0
《
快人一步:系统性能提高之道
》
售價:NT$
505.0
《
我们为什么会做梦:让梦不再神秘的新科学
》
售價:NT$
352.0
《
算法图解(第2版)
》
售價:NT$
356.0
《
科学的奇幻之旅
》
售價:NT$
352.0
《
画艺循谱:晚明的画谱与消闲
》
售價:NT$
653.0
《
新民说·现实政治史:从马基雅维利到基辛格
》
售價:NT$
454.0
《
宽容是件奢侈品(人生360度·一分钟经典故事)
》
售價:NT$
203.0
|
編輯推薦: |
本书是被世界众多高校广泛采用的讲述数据库系统的经典教材,不仅非常适合作为高等院校计算机及相关专业的本科生或研究生的数据库系统课程的教材,对于数据库设计师和架构师也极具参考价值。
|
內容簡介: |
本书是被世界众多高校广泛采用的讲述数据库系统的经典教材。本书全面阐述了数据库系统在设计、使用、实现和应 用中所需的基本概念,既有对理论与设计的清晰阐述,同时又涵盖了大量模型和实际系统,紧跟现代数据库技术的* 新发展,注重对数据库系统基本原理的介绍,着重强调数据库系统中的数学模型、设计问题、关系代数和关系演算。 本书提供了大量实验和习题,为学生进行数据库的基础设计和实现提供了实践机会。
|
關於作者: |
Ramez Elmasri(雷米兹埃尔玛斯特)
Shamkant B. Navathe(沙姆坎特纳瓦特赫) 著
|
目錄:
|
第1部分 数据库简介
第1章 数据库与数据库用户 3
1.1 简介 4
1.2 一个示例 6
1.3 数据库方法的特征 8
1.3.1 数据库系统的自描述性 9
1.3.2 程序与数据之间的隔离以及数据抽象 9
1.3.3 支持数据的多种试图 11
1.3.4 数据共享与多用户事务处理 11
1.4 幕前角色 12
1.4.1 数据库管理员 13
1.4.2 数据库设计者 13
1.4.3 最终用户 13
1.4.4 系统分析员和应用程序员(软件工程师) 14
1.5 幕后工作者 14
1.6 使用DBMS方法的优势 15
1.6.1 控制冗余 15
1.6.2 限制未经授权的访问 16
1.6.3 为程序对象提供持久性存储 16
1.6.4 为高效查询处理提供存储结构和搜索技术 17
1.6.5 提供备份和恢复 17
1.6.6 提供多种用户接口 17
1.6.7 表示数据间的复杂关系 18
1.6.8 强制执行完整性约束 18
1.6.9 允许使用规则和触发器执行推断和动作 18
1.6.10 使用数据库方法的其他潜在优势 19
1.7 数据库应用简史 20
1.7.1 使用层次和网状系统的早期数据库应用 20
1.7.2 利用关系数据库提供数据抽象和应用灵活性 20
1.7.3 面向对象的应用以及对更复杂数据库的需求 21
1.7.4 使用XML在Web上交换数据以实现电子商务 21
1.7.5 为新应用扩展数据库能力 21
1.7.6 大数据存储系统和NOSQL数据库的出现 22
1.8 何时不使用DBMS 22
1.9 小结 23
复习题 23
练习题 24
选读文献 24
第2章 数据库系统的概念和架构 25
2.1 数据模型、模式和实例 25
2.1.1 数据模型分类 26
2.1.2 模式、实例和数据库状态 27
2.2 三层模式架构和数据独立性 28
2.2.1 三层模式架构 29
2.2.2 数据独立性 30
2.3 数据库语言与界面 31
2.3.1 DBMS语言 31
2.3.2 DBMS界面 32
2.4 数据库系统环境 33
2.4.1 DBMS构成模型 34
2.4.2 数据库系统实用程序 36
2.4.3 工具、应用环境和通信设施 36
2.5 DBMS的集中式和客户服务器架构 37
2.5.1 集中式DBMS架构 37
2.5.2 基本的客户服务器架构 37
2.5.3 DBMS的两层客户服务器架构 39
2.5.4 面向Web应用的三层及n层架构 40
2.6 数据库管理系统的分类 41
2.7 小结 43
复习题 44
练习题 44
选读文献 45
第2部分 概念数据建模与数据库设计
第3章 使用实体-关系(ER)模型的数据建模 49
3.1 使用高级概念数据模型进行数据库设计 50
3.2 一个示例数据库应用 51
3.3 实体类型、实体集、属性和键 53
3.3.1 实体和属性 53
3.3.2 实体类型、实体集、键和值集 55
3.3.3 COMPANY数据库的初始概念设计 58
3.4 关系类型、关系集、角色和结构约束 59
3.4.1 关系类型、关系集和关系实例 60
3.4.2 关系度、角色名称和递归关系 61
3.4.3 二元关系类型上的约束 63
3.4.4 关系类型的属性 65
3.5 弱实体类型 65
3.6 细化COMPANY数据库的ER设计 66
3.7 ER图、命名约定和设计问题 67
3.7.1 ER图表示法小结 67
3.7.2 模式构造的正确命名 69
3.7.3 ER概念设计的设计选择 69
3.7.4 ER图的替代表示法 70
3.8 其他表示法示例:UML类图 70
3.9 度大于2的关系类型 73
3.9.1 对二元和三元(或度更高)关系的选择 73
3.9.2 三元(或度更高)关系上的约束 76
3.10 另一个示例:UNIVERSITY数据库 76
3.11 小结 78
复习题 79
练习题 80
实验题 85
选读文献 86
第4章 增强的实体-关系(EER)模型 88
4.1 子类、超类和继承 88
4.2 特化和泛化 90
4.2.1 特化 90
4.2.2 泛化 92
4.3 特化和泛化层次的约束和特征 93
4.3.1 特化与泛化的约束 93
4.3.2 特化和泛化的层次与格 95
4.3.3 利用特化和泛化对概念模式进行细化 97
4.4 使用类别的UNION类型建模 98
4.5 示例UNIVERSITY的EER模式、设计选择和形式化定义 100
4.5.1 一个不同的UNIVERSITY数据库示例 100
4.5.2 特化泛化的设计选择 102
4.5.3 EER模型概念的形式化定义 103
4.6 其他表示法的示例:在UML类图中表示特化和泛化 104
4.7 数据抽象、知识表示和本体概念 105
4.7.1 分类和实例化 106
4.7.2 标识 106
4.7.3 特化和泛化 107
4.7.4 聚合与关联 107
4.7.5 本体和语义Web 109
4.8 小结 110
复习题 110
练习题 111
实验题 117
选读文献 118
第3部分 关系数据模型和SQL
第5章 关系数据模型和关系数据库约束 123
5.1 关系模型概念 124
5.1.1 域、属性、元组和关系 124
5.1.2 关系的特征 126
5.1.3 关系模型表示法 129
5.2 关系模型约束和关系数据库模式 129
5.2.1 域约束 130
5.2.2 键约束和NULL值约束 130
5.2.3 关系数据库和关系数据库模式 132
5.2.4 实体完整性、参照完整性和外键 134
5.2.5 其他约束类型 136
5.3 更新操作、事务和处理约束破坏 136
5.3.1 插入操作 137
5.3.2 删除操作 138
5.3.3 更新操作 138
5.3.4 事务的概念 139
5.4 小结 140
复习题 140
练习题 141
选读文献 144
第6章 SQL基础 145
6.1 SQL数据定义和数据类型 146
6.1.1 SQL中的模式和目录的概念 146
6.1.2 SQL中的CREATE TABLE命令 147
6.1.3 SQL中的属性数据类型和域 149
6.2 在SQL中指定约束 151
6.2.1 指定属性约束和属性默认值 151
6.2.2 指定键约束和参照完整性约束 152
6.2.3 命名约束 153
6.2.4 使用CHECK在元组上指定约束 153
6.3 SQL中的基本检索查询 154
6.3.1 基本SQL查询的SELECT-FROM-WHERE结构 154
6.3.2 有歧义的属性名、别名、重命名和元组变量 157
6.3.3 未指定的WHERE子句和星号(*)的使用 158
6.3.4 在SQL中将表作为集合 159
6.3.5 子串模式匹配和算术运算符 161
6.3.6 查询结果排序 162
6.3.7 基本SQL检索查询的讨论和小结 163
6.4 SQL中的INSERT、DELETE 和UPDATE语句 163
6.4.1 INSERT命令 163
6.4.2 DELETE命令 165
6.4.3 UPDATE命令 165
6.5 SQL的其他特性 166
6.6 小结 167
复习题 167
练习题 168
选读文献 170
第7章 SQL的更多知识:复杂查询、触发器、视图和模式修改 171
7.1 更复杂的SQL检索查询 171
7.1.1 涉及NULL和三值逻辑的比较 171
7.1.2 嵌套查询、元组与集多集比较 173
7.1.3 关联的嵌套查询 175
7.1.4 SQL中的EXISTS和UNIQUE函数 175
7.1.5 SQL中的显式集合与重命名 177
7.1.6 SQL中的连接表和外连接 178
7.1.7 SQL中的聚合函数 179
7.1.8 分组:GROUP BY和HAVING子句 181
7.1.9 其他SQL构造:WITH和CASE 184
7.1.10 SQL中的递归查询 185
7.1.11 SQL查询的讨论和总结 186
7.2 指定约束作为断言以及指定动作作为触发器 187
7.2.1 在SQL中指定一般性约束作为断言 187
7.2.2 SQL中的触发器简介 188
7.3 SQL中的视图(虚表) 189
7.3.1 SQL中的视图概念 189
7.3.2 在SQL中指定视图 190
7.3.3 视图实现、视图更新和内联视图 191
7.3.4 将视图作为授权机制 193
7.4 SQL中的模式更改语句 194
7.4.1 DROP命令 194
7.4.2 ALTER命令 194
7.5 小结 195
复习题 197
练习题 197
选读文献 198
第8章 关系代数和关系演算 200
8.1 一元关系运算:选择和投影 201
8.1.1 选择运算 201
8.1.2 投影运算 203
8.1.3 运算序列和RENAME运算 204
8.2 集合论中的关系代数运算 206
8.2.1 并、交和差运算 206
8.2.2 笛卡儿积(叉积)运算 208
8.3 二元关系运算:连接运算和除运算 210
8.3.1 连接运算 210
8.3.2 连接的变体:等值连接和自然连接 211
8.3.3 关系代数运算的完备集 213
8.3.4 除运算 213
8.3.5 查询树的表示法 215
8.4 其他关系运算 216
8.4.1 广义投影 216
8.4.2 聚合函数和分组 217
8.4.3 递归闭包运算 218
8.4.4 外连接运算 219
8.4.5 外并运算 220
8.5 关系代数中的查询示例 221
8.6 元组关系演算 223
8.6.1 元组变量和值域关系 224
8.6.2 元组关系演算中的表达式和公式 225
8.6.3 存在量词和全称量词 226
8.6.4 元组关系演算中的示例查询 226
8.6.5 查询图的表示法 228
8.6.6 在全称量词与存在量词之间转换 228
8.6.7 在查询中使用全称量词 229
8.6.8 安全表达式 230
8.7 域关系演算 231
8.8 小结 233
复习题 234
练习题 234
实验题 238
选读文献 240
第9章 使用ER-关系映射和EER-关系映射进行关系数据库设计 241
9.1 使用ER-关系映射进行关系数据库设计 241
9.1.1 ER-关系映射算法 241
9.1.2 关于映射ER模型构造的讨论和总结 247
9.2 将EER模型构造映射到关系 248
9.2.1 特化或泛化的映射 248
9.2.2 共享子类(多重继承)的映射 251
9.2.3 类别(并类型)的映射 251
9.3 小结 252
复习题 252
练习题 252
实验题 254
选读文献 254
第4部分 数据库编程技术
第10章 SQL编程技术简介 257
10.1 数据库编程技术和问题概述 258
10.1.1 数据库编程的方法 258
10.1.2 阻抗失配 259
10.1.3 数据库编程中的典型交互序列 260
10.2 嵌入式SQL、动态SQL和SQLJ 260
10.2.1 利用嵌入式SQL检索单个元组 261
10.2.2 使用游标处理查询结果 264
10.2.3 使用动态SQL在运行时指定查询 266
10.2.4 SQLJ:在Java中嵌入SQL命令 267
10.2.5 在SQLJ中使用迭代器处理查询结果 269
10.3 利用函数调用和类库进行数据库编程:SQLCLI和JDBC 271
10.3.1 以C作为宿主语言利用SQLCLI进行数据库编程 271
10.3.2 JDBC:用于Java编程的SQL类库 274
10.4 数据库存储过程和SQLPSM 279
10.4.1 数据库存储过程和函数 279
10.4.2 SQLPSM:扩展SQL以指定持久存储模块 280
10.5 3种方法的比较 282
10.6 小结 282
复习题 283
练习题 283
选读文献 283
第11章 使用PHP进行Web数据库编程 284
11.1 一个简单的PHP示例 284
11.2 PHP的基本特性概述 287
11.2.1 PHP变量、数据类型和编程构造 287
11.2.2 PHP数组 288
11.2.3 PHP函数 289
11.2.4 PHP服务器变量和表单 291
11.3 PHP数据库编程概述 292
11.3.1 连接到数据库 292
11.3.2 从表单中收集数据 294
11.3.3 数据库表中的检索查询 295
11.4 用于数据库Web编程的Java 技术简介 296
11.5 小结 297
复习题 297
练习题 297
选读文献 298
第5部分 对象、对象-关系和XML:概念、模型、语言和标准
第12章 对象和对象-关系数据库 301
12.1 对象数据库概念概述 302
12.1.1 面向对象概念和特性简介 302
12.1.2 对象标识以及对象与文字的比较 303
12.1.3 对象和文字的复杂类型结构 304
12.1.4 操作封装和对象持久性 306
12.1.5 类型层次和继承 309
12.1.6 其他面向对象概念 312
12.1.7 对象数据库概念总结 313
12.2 SQL的对象数据库扩展 314
12.2.1 使用CREATE TYPE的用户定义类型和复杂对象 314
12.2.2 使用引用类型的对象标识符 317
12.2.3 基于UDT创建表 317
12.2.4 操作封装 318
12.2.5 指定继承和函数重载 318
12.2.6 通过引用指定联系 319
12.3 ODMG对象模型和对象定义语言ODL 320
12.3.1 ODMG的对象模型概述 320
12.3.2 ODMG对象模型中的继承 325
12.3.3 对象模型中的内置接口和类 325
12.3.4 原子(用户定义)对象 327
12.3.5 外延、键和工厂对象 329
12.3.6 对象定义语言(ODL) 330
12.4 对象数据库概念设计 335
12.4.1 ODB与RDB的概念设计之间的区别 336
12.4.2 将EER模式映射到ODB模式 336
12.5 对象查询语言(OQL) 338
12.5.1 简单OQL查询、数据库入口点和迭代器变量 338
12.5.2 查询结果和路径表达式 339
12.5.3 OQL的其他特性 341
12.6 ODMG标准中的C语言绑定概述 345
12.7 小结 347
复习题 347
练习题 348
选读文献 349
第13章 XML:可扩展标记语言 351
13.1 结构化、半结构化和非结构化数据 352
13.2 XML层次(树状)数据模型 355
13.3 XML文档、DTD和XML模式 357
13.3.1 良构和有效的XML文档和XML DTD 357
13.3.2 XML模式 360
13.4 从数据库存储和提取XML文档 364
13.5 XML语言 365
13.5.1 XPath:在XML中指定路径表达式 365
13.5.2 XQuery:在XML中指定查询 367
13.5.3 XML相关的其他语言和协议 368
13.6 从关系数据库中提取XML文档 369
13.6.1 在平面或基于图的数据上创建层次XML视图 369
13.6.2 断开环以将图转换成树 372
13.6.3 从数据库中提取XML文档的其他步骤 373
13.7 XMLSQL:用于创建XML数据的SQL函数 373
13.8 小结 375
复习题 375
练习题 376
选读文献 376
第6部分 数据库设计理论和规范化
第14章 函数依赖和关系数据库规范化的基础知识 379
14.1 关系模式的非形式化设计准则 380
14.1.1 给关系中的属性赋予清晰的定义 381
14.1.2 元组中的冗余信息和更新异常 383
14.1.3 元组中的NULL值 386
14.1.4 生成伪元组 386
14.1.5 关于设计准则的总结和讨论 388
14.2 函数依赖 389
14.3 基于主键的范式 391
14.3.1 关系的规范化 392
14.3.2 范式的实际应用 393
14.3.3 键的定义和参与键的属性 393
14.3.4 第一范式 394
14.3.5 第二范式 397
14.3.6 第三范式 398
14.4 第二范式和第三范式的一般定义 399
14.4.1 第二范式的一般定义 399
14.4.2 第三范式的一般定义 401
14.4.3 解释第三范式的一般定义 401
14.5 Boyce-Codd范式 402
14.6 多值依赖和第四范式 405
14.7 连接依赖和第五范式 407
14.8 小结 408
复习题 409
练习题 410
实验题 414
选读文献 414
第15章 关系数据库设计算法及其他依赖 415
15.1 函数依赖的高级主题:推理规则、等价和最小覆盖 416
15.1.1 函数依赖的推理规则 416
15.1.2 函数依赖集合的等价性 420
15.1.3 最小函数依赖集合 420
15.2 关系分解的性质 422
15.2.1 关系分解和范式的不足 423
15.2.2 分解的依赖保持性质 423
15.2.3 分解的非加性(无损)连接性质 424
15.2.4 测试二元分解的非加性连接性质 427
15.2.5 连续的非加性连接分解 427
15.3 关系数据库模式设计算法 427
15.3.1 依赖保持和非加性(无损)连接的3NF模式分解 427
15.3.2 非加性连接的BCNF模式分解 430
15.4 NULL值、悬挂元组和替代的关系设计 431
15.4.1 NULL值和悬挂元组的问题 431
15.4.2 规范化算法和替代关系设计的讨论 433
15.5 多值依赖和4NF的进一步讨论 434
15.5.1 函数依赖和多值依赖的推理规则 434
15.5.2 再论第四范式 435
15.5.3 非加性连接的4NF关系分解 436
15.6 其他的依赖和范式 437
15.6.1 连接依赖和第五范式 437
15.6.2 包含依赖 437
15.6.3 基于算术函数和过程的函数依赖 438
15.6.4 域-键范式 439
15.7 小结 439
复习题 440
练习题 440
实验题 441
选读文献 442
第7部分 文件结构、散列、索引 和物理数据库设计
第16章 磁盘存储、基本文件结构、散列和现代存储架构 445
16.1 简介 445
16.1.1 存储器的层次结构和存储设备 446
16.1.2 数据库的存储组织方式 448
16.2 辅存设备 449
16.2.1 磁盘设备的硬件描述 450
16.2.2 使磁盘上的数据访问更高效 454
16.2.3 固态元件(SSD)存储器 455
16.2.4 磁带存储设备 456
16.3 块缓冲 457
16.3.1 缓冲区管理 458
16.3.2 缓冲区替换策略 459
16.4 把文件记录存放在磁盘上 460
16.4.1 记录和记录类型 461
16.4.2 文件、定长记录和变长记录 461
16.4.3 记录块、跨块记录与非跨块记录 463
16.4.4 在磁盘上分配文件块 464
16.4.5 文件头 464
16.5 文件操作 465
16.6 无序记录的文件(堆文件) 467
16.7 有序记录的文件(排序文件) 468
16.8 散列技术 471
16.8.1 内部散列 471
16.8.2 磁盘文件的外部散列 474
16.8.3 允许动态文件扩展的散列技术 476
16.9 其他主文件组织 480
16.9.1 混合记录的文件 480
16.9.2 将B树及其他数据结构作为主组织 481
16.10 使用RAID技术并行化磁盘访问 481
16.10.1 利用RAID提高可靠性 482
16.10.2 利用RAID改进性能 483
16.10.3 RAID组织和级别 483
16.11 现代存储架构 484
16.11.1 存储区域网络 485
16.11.2 网络连接存储 485
16.11.3 iSCSI及其他基于网络的存储协议 486
16.11.4 自动存储分层 487
16.11.5 基于对象的存储 487
16.12 小结 488
复习题 489
练习题 490
选读文献 493
第17章 文件的索引结构和物理数据库设计 495
17.1 单级有序索引的类型 495
17.1.1 主索引 496
17.1.2 聚簇索引 499
17.1.3 辅助索引 500
17.1.4 小结 504
17.2 多级索引 505
17.3 使用B树和B 树的动态多级索引 508
17.3.1 搜索树和B树 509
17.3.2 B树 512
17.4 多个键上的索引 520
17.4.1 多个属性上的有序索引 520
17.4.2 分区散列 521
17.4.3 网格文件 521
17.5 其他索引类型 522
17.5.1 散列索引 522
17.5.2 位图索引 523
17.5.3 基于函数的索引 525
17.6 一些关于索引的一般性主题 526
17.6.1 逻辑索引与物理索引 526
17.6.2 索引创建 527
17.6.3 索引调优 528
17.6.4 与关系和索引存储相关的其他主题 529
17.7 关系数据库中的物理数据库设计 530
17.7.1 影响物理数据库设计的因素 530
17.7.2 物理数据库设计决策 532
17.8 小结 533
复习题 534
练习题 534
选读文献 537
第8部分 查询处理和优化
第18章 查询处理的策略 541
18.1 将SQL查询转换成关系代数和其他运算符 543
18.2 外排序算法 545
18.3 选择运算的算法 547
18.3.1 选择运算的实现选项 547
18.3.2 合取选择的搜索方法 549
18.3.3 析取选择的搜索方法 550
18.3.4 估算条件的选择度 551
18.4 实现连接运算 552
18.4.1 实现连接运算的方法 552
18.4.2 缓冲区空间和外层循环文件的选择如何影响嵌套循环连接的性能 555
18.4.3 连接选择因子如何影响连接性能 556
18.4.4 分区-散列连接的一般情况 557
18.4.5 混合散列连接 558
18.5 投影和集合运算的算法 559
18.6 实现聚合运算和不同类型的连接 561
18.6.1 实现聚合运算 561
18.6.2 实现不同类型的连接 562
18.7 使用流水线组合运算 563
18.8 查询处理的并行算法 565
18.8.1 运算符级并行性 566
18.8.2 查询内的并行性 568
18.8.3 查询间的并行性 568
18.9 小结 569
复习题 569
练习题 570
选读文献 570
第19章 查询优化 571
19.1 查询树和查询优化的启发式规则 571
19.1.1 查询树和查询图的表示法 572
19.1.2 查询树的启发式优化 573
19.2 查询执行计划的选择 579
19.2.1 查询求值的替代方法 579
19.2.2 嵌套子查询优化 580
19.2.3 子查询(视图)合并转换 581
19.2.4 物化视图 583
19.3 在基于代价的优化中使用选择度 586
19.3.1 查询执行的代价成分 587
19.3.2 代价函数中使用的目录信息 588
19.3.3 直方图 588
19.4 选择运算的代价函数 589
19.5 连接运算的代价函数 592
19.5.1 半连接和反连接的连接选择度和连接基数 594
19.5.2 基于代价公式的连接优化的示例 595
19.5.3 多关系查询和连接顺序选择 596
19.5.4 物理优化 598
19.5.5 连接顺序的动态编程方法 598
19.6 说明基于代价的查询优化的示例 600
19.7 与查询优化相关的额外问题 601
19.7.1 显示系统的查询执行计划 602
19.7.2 其他运算的大小估算 602
19.7.3 计划缓存 603
19.7.4 前k个结果优化 603
19.8 数据仓库中的查询优化的示例 604
19.9 Oracle中的查询优化概述 606
19.9.1 物理优化器 606
19.9.2 全局查询优化器 606
19.9.3 自适应优化 607
19.9.4 数组处理 607
19.9.5 提示 608
19.9.6 存储提纲 608
19.9.7 SQL计划管理 608
19.10 语义查询优化 609
19.11 小结 610
复习题 610
练习题 611
选读文献 611
第9部分 事务处理、并发控制和恢复
第20章 事务处理概念和理论简介 615
20.1 事务处理简介 615
20.1.1 单用户系统与多用户系统 616
20.1.2 事务、数据库项、读写操作和DBMS缓冲区 616
20.1.3 为什么需要并发控制 618
20.1.4 为什么需要恢复 620
20.2 事务和系统概念 621
20.2.1 事务状态及额外的操作 621
20.2.2 系统日志 622
20.2.3 事务的提交点 623
20.2.4 特定于DBMS的缓冲区替换策略 624
20.3 事务的理想性质 625
20.4 基于可恢复性描述调度的特征 626
20.4.1 事务的调度(历史) 626
20.4.2 基于可恢复性描述调度的特征 627
20.5 基于可串行化描述调度的特征 629
20.5.1 串行、非串行和冲突-可串行化调度 629
20.5.2 调度的可串行化测试 632
20.5.3 如何将可串行化用于并发控制 635
20.5.4 视图等价和视图可串行化 636
20.5.5 其他类型的调度等价性 637
20.6 SQL中的事务支持 637
20.7 小结 639
复习题 640
练习题 641
选读文献 642
第21章 并发控制技术 643
21.1 并发控制的两阶段锁定技术 643
21.1.1 锁类型和系统锁表 644
21.1.2 通过两阶段锁定保证可串行化 647
21.1.3 处理死锁和饥饿 650
21.2 基于时间戳排序的并发控制 653
21.2.1 时间戳 653
21.2.2 并发控制的时间戳排序算法 653
21.3 多版本并发控制技术 655
21.3.1 基于时间戳排序的多版本技术 655
21.3.2 使用验证锁的多版本两阶段锁定 656
21.4 验证(乐观)技术和快照隔离并发控制 657
21.4.1 基于验证(乐观)的并发控制 657
21.4.2 基于快照隔离的并发控制 658
21.5 数据项的粒度和多粒度锁定 659
21.5.1 锁定的粒度级别考虑 659
21.5.2 多粒度级别锁定 660
21.6 在索引中使用锁进行并发控制 662
21.7 其他并发控制问题 663
21.7.1 插入、删除和幻象记录 663
21.7.2 交互式事务 664
21.7.3 锁存器 664
21.8 小结 665
复习题 665
练习题 666
选读文献 667
第22章 数据库恢复技术 668
22.1 恢复概念 668
22.1.1 恢复概述和恢复算法的分类 668
22.1.2 磁盘块的高速缓存(缓冲) 669
22.1.3 预写式日志记录、窃取非窃取和强制非强制 670
22.1.4 系统日志中的检查点和模糊检查点 672
22.1.5 事务回滚和级联回滚 672
22.1.6 不会影响数据库的事务动作 674
22.2 基于延迟更新的NO-UNDOREDO恢复 674
22.3 基于即时更新的恢复技术 677
22.4 镜像分页 678
22.5 ARIES恢复算法 679
22.6 多数据库系统中的恢复 682
22.7 数据库备份和灾难性故障恢复 683
22.8 小结 683
复习题 684
练习题 685
选读文献 687
第10部分 分布式数据库、NOSQL系统和大数据
第23章 分布式数据库概念 691
23.1 分布式数据库概念 692
23.1.1 DDB的构成 692
23.1.2 透明性 692
23.1.3 可用性和可靠性 693
23.1.4 可伸缩性和分区容错性 694
23.1.5 自治性 694
23.1.6 分布式数据库的优点 695
23.2 分布式数据库设计中的数据分段、复制和分配技术 695
23.2.1 数据分段和分片 696
23.2.2 数据复制和分配 698
23.2.3 分段、分配和复制的示例 698
23.3 分布式数据库中的并发控制和恢复概述 701
23.3.1 基于数据项的标识副本的分布式并发控制 702
23.3.2 基于投票的分布式并发控制 703
23.3.3 分布式恢复 704
23.4 分布式数据库中的事务管理概述 704
23.4.1 两阶段提交协议 705
23.4.2 三阶段提交协议 705
23.4.3 事务管理的操作系统支持 705
23.5 分布式数据库中的查询处理和优化 706
23.5.1 分布式查询处理 706
23.5.2 分布式查询处理的数据传输代价 706
23.5.3 使用半连接的分布式查询处理 708
23.5.4 查询和更新分解 709
23.6 分布式数据库系统的类型 711
23.7 分布式数据库架构 713
23.7.1 并行架构与分布式架构 714
23.7.2 纯粹的分布式数据库的通用架构 715
23.7.3 联邦式数据库模式架构 716
23.7.4 三层客户-服务器架构概述 717
23.8 分布式目录管理 718
23.9 小结 719
复习题 720
练习题 721
选读文献 722
第24章 NOSQL数据库和大数据存储系统 725
24.1 NOSQL系统简介 725
24.1.1 NOSQL系统的出现 725
24.1.2 NOSQL系统的特征 726
24.1.3 NOSQL系统的类别 728
24.2 CAP定理 729
24.3 基于文档的NOSQL系统和
MongoDB 730
24.3.1 MongoDB数据模型 730
24.3.2 MongoDB CRUD操作 733
24.3.3 MongoDB分布式系统特征 733
24.4 NOSQL键-值存储 735
24.4.1 DynamoDB概述 735
24.4.2 Voldemort键-值分布式数据存储 736
24.4.3 其他键-值存储的示例 738
24.5 基于列或宽列NOSQL系统 739
24.5.1 Hbase数据模型和版本化 739
24.5.2 Hbase CRUD操作 741
24.5.3 Hbase存储和分布式系统概念 741
24.6 NOSQL图形数据库和Neo4j 742
24.6.1 Neo4j数据模型 742
24.6.2 Neo4j的Cypher查询语言 745
24.6.3 Neo4j接口和分布式系统特征 746
24.7 小结 747
复习题 747
选读文献 748
第25章 基于MapReduce和Hadoop的大数据技术 749
25.1 什么是大数据 751
25.2 MapReduce和Hadoop简介 753
25.2.1 历史背景 753
25.2.2 MapReduce 754
25.2.3 Hadoop版本 757
25.3 Hadoop分布式文件系统(HDFS) 757
25.3.1 HDFS简介 757
25.3.2 HDFS的架构 758
25.3.3 HDFS中的文件IO操作和副本管理 759
25.3.4 HDFS可伸缩性 760
25.3.5 Hadoop生态系统 761
25.4 MapReduce:额外的细节 762
25.4.1 MapReduce运行时环境 762
25.4.2 示例:在MapReduce中实现连接 764
25.4.3 Apache Hive 767
25.4.4 HadoopMapReduce技术的优点 770
25.5 Hadoop v2的别名YARN 770
25.5.1 YARN背后的基本原理 770
25.5.2 YARN的架构 772
25.5.3 YARN上的其他框架 775
25.6 一般性讨论 777
25.6.1 HadoopMapReduce与并行RDBMS 777
25.6.2 云计算中的大数据 779
25.6.3 云中的大数据应用的数据局部性问题和资源优化 780
25.6.4 YARN作为数据服务平台 781
25.6.5 大数据技术面临的挑战 782
25.6.6 继续前进 783
25.7 小结 784
复习题 785
选读文献 786
第11部分 高级数据库模型、系统和应用
第26章 增强数据模型:主动数据库、时态数据库、空间数据库、多媒体数据库和演绎数据库简介 791
26.1 主动数据库的概念和触发器 792
26.1.1 主动数据库的泛化模型和Oracle触发器 792
26.1.2 主动数据库的设计和实现问题 796
26.1.3 STARBURST中的语句级主动规则的示例 798
26.1.4 主动数据库的潜在应用 800
26.1.5 SQL-99中的触发器 801
26.2 时态数据库的概念 801
26.2.1 时间表示法、日历和时间维度 802
26.2.2 使用元组版本化在关系数据库中纳入时间 804
26.2.3 使用属性版本化在面向对象数据库中纳入时间 809
26.2.4 时态查询构造和TSQL2语言 810
26.2.5 时间序列数据 812
26.3 空间数据库概念 813
26.3.1 空间数据库简介 813
26.3.2 空间数据类型和模型 814
26.3.3 空间算子和空间查询 815
26.3.4 空间数据索引 816
26.3.5 空间数据挖掘 817
26.3.6 空间数据的应用 818
26.4 多媒体数据库的概念 818
26.4.1 图像的自动分析 820
26.4.2 图像中的对象识别 821
26.4.3 图像的语义标签 821
26.4.4 音频数据源分析 822
26.5 演绎数据库简介 822
26.5.1 演绎数据库概述 822
26.5.2 PrologDatalog表示法 823
26.5.3 Datalog表示法 825
26.5.4 子句形式和Horn子句 825
26.5.5 规则解释 827
26.5.6 Datalog程序及其安全性 829
26.5.7 使用关系运算 831
26.5.8 非递归Datalog查询求值 832
26.6 小结 834
复习题 835
练习题 836
选读文献 838
第27章 信息检索和Web搜索简介 841
第28章 数据挖掘概念 880
第29章 数据仓库和OLAP概述 906
第12部分 额外的数据库主题:安全性
第30章 数据库安全性 923
附录A ER模型的可选图形表示法 957
附录B 磁盘参数 959
附录C QBE语言概述 961
C.1 QBE中的基本检索 961
C.2 QBE中的分组、聚合和数据库修改 964
选读文献 967
参考文献 969
|
內容試閱:
|
献给Amalia以及Ramy、Riyad、Katrina和Thomas。
Ramez Elmasri
献给我的妻子Aruna,感谢她的爱、支持和理解。
献给Rohan、Maya和Ayush,感谢他们带给我们巨大的快乐。
Shamkant B. Navathe
译者序
数据库技术是计算机科学技术中发展最快的领域之一,也是应用最广泛的一门学科。数据库作为计算机及相关专业的核心课程,在国内外已经出版了大量相关的教科书。而Elmasri和Navathe编写的本书,能够连续多次再版,为世界上众多高校广泛采用,成为数据库系统原理的经典教材。究其原因,一方面是内容丰富,清晰地阐述了数据库系统的基本理论和设计问题,涵盖了数据库系统的设计、实现和管理等方面的诸多专题;另一方面则在于其结构合理、更新及时,反映了数据库系统和应用开发的发展和动向。
在本书的第7版中,重新组织了章节顺序。不过,在组织本书内容时,仍然可以使老师在讲解本书内容时选择遵循新的章节顺序,或者选择一种不同的章节顺序。这一版还新增了两章用于介绍数据库系统和大数据处理方面的最新进展:其中一章(第24章)介绍了一类更新的数据库系统,称为NOSQL数据库;另一章(第25章)介绍了用于处理大数据的技术,包括MapReduce和Hadoop。
本书内容组织灵活、独立,读者可根据个人需要进行取舍。特别是,可以依赖于老师的个人偏好,灵活地安排章节教学顺序。此外,本书各部分的内容相对独立,便于自学。
本书非常适合作为高等院校计算机及相关专业的本科生或研究生的数据库系统课程的教材。对于数据库设计师和架构师,本书也是一种非常有价值的参考书。
本书由陈宗斌、陈征主译。由于时间紧迫,加之译者水平有限,欠妥之处在所难免,恳请广大读者批评指正。
本书介绍了设计、使用和实现数据库系统以及数据库应用程序时所需的基本概念。书中重点介绍了数据库建模与设计的基础知识、数据库管理系统提供的语言和模型,以及一些数据库系统实现技术。本书可供大学三、四年级的学生或研究生作为数据库系统的教科书和参考书使用,并可以安排一到两个学期的课时。本书的目标是对当今数据库系统和应用的最重要方面以及相关技术进行深入、最新的阐述。我们假定读者熟悉基本的程序设计以及数据结构的概念,并对计算机组织结构的基本知识有一定的了解。
本版本的新增内容
本书第7版中添加了以下一些关键特性:
* 重新组织了章节顺序(基于对使用本教材的老师所做的调查访问);不过,在组织本书内容时,仍然使各位老师在讲解本书内容时,可以选择遵循新的章节顺序,或者选择一种不同的章节顺序(例如,遵循本书第6版中的章节顺序)。
* 在本书第7版中新增了两章用于介绍数据库系统和大数据处理方面的最新进展;新增的一章(第24章)介绍了一类更新的数据库系统,称为NOSQL数据库(NOSQL database);新增的另一章(第25章)介绍了用于处理大数据(big data)的技术,包括MapReduce和Hadoop。
* 对有关查询处理和优化的章节进行了扩充,并将其重新组织成两章;第18章重点介绍用于查询处理的策略和算法,而第19章则重点介绍查询优化技术。
* 除了以前版本中的COMPANY数据库示例之外,在第7版的前几章(第3~8章)中还添加了另一个UNIVERSITY数据库示例。
* 在不同程度上更新了许多单独的章,包括了更新的技术和方法;这里将不会讨论这些增强方面,而将在前言后面讨论第7版的组织结构时描述它们。
本书的主要特色如下:
* 本书内容组织灵活、独立,读者可根据个人需要进行取舍。特别是,可以依赖于老师的个人偏好,灵活地安排章节教学顺序。
* 本书的配套Web站点(http:www.pearsonhighered.comcs-resources)提供了可以加载到各类关系数据库中的数据,以方便学生实现更多的实验题。
* 依赖图(在本前言后面显示)显示了哪些章节依赖于前面的其他章节;这可为想要定制章节教学顺序的老师提供指导。
* 补充材料集合,为老师和学生提供了一组丰富的补充材料,如PowerPoint幻灯片、正文中的图片以及教师的习题解答。
第7版的组织结构和内容
第7版对内容组织进行了一些改变,并且改进了个别章节。本书现在被划分为如下12个部分:
* 第1部分(第1章和第2章)描述了基本的介绍性概念,它们是很好地理解数据库模型、系统和语言所必需的。第1章和第2章介绍了数据库、典型用户以及DBMS概念、术语和架构,并且讨论了随着时间的推移数据库技术的进步以及数据模型的简史。对这两章进行了更新,以便介绍一些更新的技术,例如NOSQL系统。
* 第2部分(第3章和第4章)介绍了实体-关系建模和数据库设计;不过,需要指出的是,如果老师更喜欢在第3章和第4章之前讲授关于关系模型的章节(第5~8章),那么他们可以这样做。在第3章中,将介绍ER(Entity-Relationship,实体-关系)模型和ER图的概念,并用于阐述概念性的数据库设计。第4章显示了如何扩展ER模型,以纳入额外的建模概念,例如子类、特化、泛化、并类型(类别)和继承,从而导致增强的ER(EER)数据模型和EER图。在第7章和第8章中还将介绍URL类图的表示法,它们可以作为EREER图的替代模型和图形表示法。
* 第3部分(第5~9章)将详细介绍关系数据库和SQL,并且在有关SQL的章节中包括了一些额外的新内容,用于介绍第6版没有涉及的几种SQL构造。第5章描述了基本的关系模型、它的完整性约束和更新操作。第6章描述了用于关系数据库的SQL标准的一些基本部分,包括数据定义、数据修改操作和简单的SQL查询。第7章介绍了更复杂的SQL查询,以及触发器、断言、视图和模式修改等SQL概念。第8章描述了关系代数的形式运算并且介绍了关系演算。在第8章介绍关系代数和演算之前,就介绍了关于SQL的材料(第6章和第7章),这就允许老师可以根据需要,在课程中提早开始SQL项目的教学(如果老师想要采用这种顺序,那么在第6章和第7章之前讲述第8章将是可能的)。第3部分的最后一章即第9章介绍了在ER和EER与关系映射之间进行转换,它们涉及一些算法,可以使用它们从概念性的EREER模式设计来设计关系数据库模式。
* 第4部分(第10章和第11章)包含关于数据库编程技术的章节。这些章节被指定为阅读材料,并且辅以关于在编程项目的课程中使用的特定语言的材料(在Web上可以轻松获得这篇文档的大部分内容)。第10章介绍传统的SQL编程主题,例如嵌入式SQL、动态SQL、ODBC、SQLJ、JDBC和SQLCLI。第11章介绍Web数据库编程(在我们的示例中使用的是PHP脚本语言),并且包括了一些新材料,其中讨论了用于Web数据库编程的Java技术。
* 第5部分(第12章和第13章)包括关于对象关系和面向对象数据库(第12章)以及XML(第13章)的更新材料。这两章阐述了SQL标准如何将对象概念和XML概念纳入该标准的更新版本中。第12章首先介绍了一些用于对象数据库的概念,然后展示了如何将它们纳入SQL标准中,以便向关系数据库系统中添加对象能力。接下来,还介绍了ODMG对象模型标准、它的对象定义以及查询语言。第13章介绍了XML(eXtensible Markup Language,可扩展标记语言)模型和语言,并讨论了如何将XML与数据库系统相关联。该章还阐述了XML概念和语言,并将XML模型与传统的数据库模型做比较。此外,书中还将展示在XML与关系表示之间将如何转换数据,以及用于从关系表中提取XML文档的SQL命令。
* 第6部分(第14章和第15章)包含关于规范化和关系设计理论的章节(第7版把规范化算法的所有形式方面都移到了第15章)。第14章定义了函数依赖,以及基于函数依赖的规范形式。第14章还开发了一种逐步的直观规范化方法,并且包括了多值依赖和连接依赖的定义。第15章介绍了规范化理论,以及通过规范化为关系数据库设计所开发的形式化体系、理论和算法,包括关系分解算法和关系合成 算法。
* 第7部分(第16章和第17章)介绍了磁盘上的文件组织(第16章)和数据库文件的索引(第17章)。第16章描述了在磁盘上组织记录文件的主要方法,包括有序(排序)、无序(堆)和散列文件;其中介绍了用于磁盘文件的静态和动态散列技术。还对第16章进行了更新,包括关于DBMS的缓冲区管理策略的内容、新型存储设备的概述,以及文件和现代存储架构的标准。第17章描述了文件的索引技术,包括B树和B 树数据结构以及网格文件,并且利用新的示例以及关于索引的更深入的讨论对其进行了更新,包括在物理设计期间如何选择合适的索引以及索引创建。
* 第8部分(第18章和第19章)介绍了查询处理算法(第18章)和优化技术(第19章)。这两章进行了更新,它们是从以前版本中涵盖这两个主题的单独一章重新组织而成的,并且包括商业DBMS中使用的一些更新的技术。第18章介绍了用于在磁盘文件上搜索记录、连接来自两个文件(表)中的记录以及用于其他相关操作的算法。第18章包含一些新内容,其中讨论了半连接(semi-join)和反连接(anti-join)操作,并且利用几个示例说明如何在查询处理中使用它们;还讨论了用于选择性估计(selectivity estimation)的技术。第19章介绍了用于查询优化的技术,它们使用了成本估计和启发式规则;该章包括一些新内容,涉及嵌套式子查询优化、柱状图的使用、物理优化,以及连接排序方法和数据仓库中的典型查询的优化。
* 第9部分(第20~22章)介绍了事务处理概念、并发控制,以及从失败中进行数据库恢复。这几章进行了更新,包括在一些商业和开源DBMS中使用的一些更新的技术。第20章介绍了事务处理系统所需的技术,并且定义了调度的可恢复性和可串行化的概念;其中新增了一节关于DBMS的缓冲区替换策略的内容,并且新增了关于快照隔离概念的讨论。第21章概述了各种并发控制协议,并且重点讨论了两阶段锁定。此外,还讨论了时间戳排序和乐观并发控制技术,以及多粒度锁定。第21章包括一些新内容,其中介绍了基于快照隔离概念的并发控制方法。最后,第23章重点介绍了数据库恢复协议,并且概述了数据库恢复中使用的概念和技术。
* 第10部分(第23~25章)包括一章介绍分布式数据库(第23章),并且利用新增加的另外两章介绍用于大数据的NOSQL存储系统(第24章)以及基于Hadoop和MapReduce的大数据技术(第25章)。第23章介绍分布式数据库概念,包括可用性和可伸缩性、数据的复制和分片、在复制的数据当中维护数据一致性,以及许多其他的概念和技术。在第24章中,将NOSQL系统分成4个一般的类别(其中每个类别中都具有一个示例系统,它将用于我们的示例)以及一些数据模型和操作,并且讨论和比较了每种NOSQL系统的复制分布可伸缩性策略。在第25章中,介绍了用于大数据的分布式处理的MapReduce编程模型,然后介绍了Hadoop系统和HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)、Pig和Hive高级接口,以及YARN架构。
* 第11部分(第26~29章)包括以下内容:第26章介绍了多种高级数据模型,包括活动数据库触发器(26.1节)、时态数据库(26.2节)、空间数据库(26.3节)、多媒体数据库(26.4节)和演绎数据库(26.5节)。第27章讨论了信息检索(information retrieval,IR)和Web搜索,包括诸如IR和基于关键词的搜索、比较DR与IR、检索模型、搜索评估以及评级算法之类的主题。第28章介绍了数据挖掘,其中概述了各种数据挖掘方法,例如关联规则挖掘、群集、分类和序列模式发现。第29章概述了数据仓库,包括诸如数据仓库模型和操作之类的主题,还概述了构建数据仓库的过程。
* 第12部分(第30章)用一章的篇幅阐述数据库安全,其中讨论了用于自主访问控制的SQL命令(GRANT、REVOKE),以及强制性安全级别和模型,用于在关系数据库中包括强制性访问控制,还讨论了诸如SQL注入攻击之类的威胁,以及与数据安全和隐私相关的其他技术和方法。
附录A给出了多种替代的图形表示法,它们用于显示概念性的ER或EER模式。如果老师更喜欢使用这些表示法,也可以用它们替代本书中使用的表示法。附录B给出了一些关于磁盘的重要物理参数。附录C概述了QBE图形查询语言。附录D和附录E(可从本书的配套Web站点http:www.pearsonhighered.comelmasri下载)介绍了基于分层和网络数据库模型的遗留数据库系统。作为许多商业数据库应用和事务处理系统的基础,这些数据库已经使用了30余年。
本书使用指南
讲授一门数据库课程可以有多种不同的方法。作为数据库系统的介绍性课程,第1~7部分中的章节可以按照它们在本书中的顺序进行讲授,也可以根据老师个人喜好的顺序进行讲解。教师可以根据课程的重点,对这些内容进行删减,或者从本书的其余部分选择一些章节添加进来。在本书某些章的开头一小节结尾处,我们列出了当不需要详细讨论一些主题时可以删略的章节。如果作为一门介绍性的数据库课程,我们建议讲授第1~15章的内容,并可根据学生的背景和掌握程度选择其他章的一些内容。如果重点关注的是系统实现技术,则应该使用第7~9部分中的一些章节替换前面一些章节。
第3章和第4章介绍了使用ER和EER模型进行概念建模,这些内容将有助于从概念上加深对数据库的理解。不过,也可以部分讲解它们,或者在课程的后期加入这些内容。如果课程的重点是DBMS实现,甚至可以将这些内容略去不讲。第16章和第17章介绍了文件的组织和索引,这些内容可以放在课程的前期或后期讲授。如果课程的重点是数据库模型和语言,甚至可以将这些内容略去不讲。对于那些已经学习过文件组织课程的学生来说,可以将这些章节的部分内容作为阅读材料,或者将这些章节中的一些练习题作为相关概念的复习。
如果课程的重点是数据库设计,那么老师应该尽早开始讲授第3章和第4章,接着介绍关系数据库。一个完整的数据库设计和实现项目的生命周期将包括概念设计(第3章和第4章)、关系数据库(第5~7章)、数据模型映射(第9章)、规范化(第14章),以及通过SQL的应用程序实现(第10章)。如果重点关注的是Web数据库编程和应用,那么也应该包括第11章的内容。此外,还需要一些有关特定编程语言以及所使用的RDBMS的其他文献。本书在编写时就考虑了其主题可以按不同的顺序讲授。下图展示了各章之间的主要依赖关系,在前两章的介绍性内容之后,可以从多个不同的主题开始讲授。尽管这个图看起来可能有些复杂,但是值得注意的是,如果按照如图所示的顺序讲授各章内容,那么将不会丢失章节间的依赖关系。如果老师想以自己选择的顺序来讲授课程,那么可将此图作为参考。
如果将本书作为一个学期课程的教材,可以将选读的章节留作课外阅读材料;如果将本书作为上、下两学期的教材,第一学期的课程可以是数据库设计和数据库系统导论,面向大二、大三或大四的学生,涵盖第1~15章的大部分内容。第二学期的课程是数据库模型与实现技术,面向大四学生或一年级研究生,可涵盖第16~30章的大部分内容。老师还可以根据个人喜好,以其他方式来安排两个学期的课程学习顺序。
补 充 材 料
授权教师可以从Pearson的教师资源中心(http:www.pearsonhighered.comirc)获得本书的支持材料。要访问该Web站点,可以联系当地的Pearson代理。
* PowerPoint讲义和图片。
* 解决方案手册。
致谢
非常荣幸能够向这么多人致谢,感谢他们对本书的帮助与贡献。首先要感谢本书的编辑Matt Goldstein对本书的指导、鼓励和支持。感谢Rose Kernan对本书的生产管理、Patricia Daly对本书进行的全面细致的编辑、Martha McMaster勤勉地对书中各页所做的审校以及生产团队的管理编辑Scott Disanno,感谢他们所做的卓越工作。我们还要感谢Pearson的Kelsey Loanes对这个项目给予的持续不断的帮助,以及感谢以下审稿人:Michael Doherty、Deborah Dunn、Imad Rahal、Karen Davis、Gilliean Lee、Leo Mark、Monisha Pulimood、Hassan Reza、Susan Vrbsky、Li Da Xu、Weining Zhang和Vincent Oria。
Ramez Elmasri要感谢Kulsawasd Jitkajornwanich、Vivek Sharma和Surya Swaminathan帮助准备第24章中的一些材料。Sham Navathe要感谢下面这些人在关键性的审稿和修订工作中所给予的帮助:Dan Forsythe和Satish Damle参与了存储系统的讨论;Rafi Ahmed详细地重新组织了关于查询处理和优化的内容;Harish Butani、Balaji Palanisamy和Prajakta Kalmegh帮助提供了Hadoop和MapReduce技术材料;Vic Ghorpadey和Nenad Jukic修订了数据仓库的内容;最后,Frank Rietta在数据库安全的更新技术方面、Kunal Malhotra在多个讨论中,以及Saurav Sahay在信息检索系统的发展方面,分别做出了他们的贡献。
我们还要再次感谢曾经审阅以及为本书的前几版做出贡献的人们。
最后,我们真切地感谢我们的家人所给予的支持、鼓励和耐心。
|
|