1.1 缘何当前难以相互合作 2
目录译者序Jon Kern序Douglas K.Barry序致谢前言第一部分 基础背景第1章 敏捷数据方法 2
1.2 发现问题 4
1.3 敏捷运动 5
1.3.1 敏捷软件开发宣言 5
1.3.2 敏捷软件开发原则 7
1.4 敏捷数据的基本原理 7
1.5 敏捷数据概述 8
1.5.1 敏捷DBA 8
1.5.2 应用程序开发者 9
1.5.3 企业管理员 10
1.5.4 企业架构设计师 11
1.6 敏捷软件开发者 12
1.7 敏捷数据能解决我们的问题吗 13
1.8 总结 14
2.1 面向对象概念简述 15
第2章 从用例到数据库——现实世界的UML 15
2.2 UML介绍 18
2.2.1 核心UML图 18
2.2.2 辅助UML图 21
2.3 数据建模的UML档案 26
2.3.1 标识模型或存储机制的类型 27
2.3.2 建模表、实体和视图 28
2.3.3 建模关系 31
2.3.4 建模数据属性和列 31
2.3.5 建模键 32
2.3.6 建模约束和触发器 34
2.3.7 建模存储过程 34
2.3.8 建模数据库内的段 34
2.3.9 建模其他概念 34
2.4 总结 35
3.1 敏捷DBA的角色 36
3.2 什么是数据建模 36
第3章 数据建模基础 36
3.2.1 如何实际运用数据模型 37
3.2.2 基本标记:如何阅读数据模型 39
3.3 如何建模数据 41
3.3.1 识别数据实体 41
3.3.2 识别属性 42
3.3.3 应用数据命名规范 42
3.3.4 识别关系 42
3.3.6 分配键 44
3.3.5 应用数据建模模式 44
3.4 如何更好地进行数据建模 47
3.5 总结 48
第4章 数据规范化 49
4.1 为什么需要数据规范化 49
4.2 敏捷DBA的角色 49
4.3 数据规范化的准则 50
4.3.1 第一范式(1NF) 50
4.3.2 第二范式(2NF) 52
4.3.3 第三范式(3NF) 53
4.3.4 超越3NF 54
4.4 总结 54
第5章 类规范化 55
5.1 如何将类规范化和其他面向对象的设计实践联系起来 55
5.2 敏捷DBA的角色 56
5.3 类规范化的准则 56
5.3.1 第一对象范式(1ONF) 56
5.3.2 第二对象范式(2ONF) 57
5.3.3 第三对象范式(3ONF) 58
5.3.4 超越3ONF 59
5.4 总结 59
第6章 关系数据库技术,无论你喜欢与否 60
6.1 关系数据库技术 60
6.1.1 关系数据库的简明特性 60
6.1.2 关系数据库的高级特性 61
6.2 耦合:你最大的敌人 63
6.3 关系数据库的额外挑战 65
6.4 封装:你最好的盟友 66
6.5 超越关系数据库:根据实际情况做出选择 68
6.6 总结 71
第7章 对象-关系的阻抗失配 73
7.1 敏捷DBA的角色 73
7.2 技术上的阻抗失配 73
7.2.1 虚假的相似性 74
7.2.2 微妙的差异性 75
7.3 文化上的阻抗失配 78
7.4 总结 80
第8章 遗留数据库——所有你需要了解却害怕应付的事物 81
8.1 敏捷DBA的角色 81
8.2 遗留数据源 83
8.3 理解与遗留数据相关的常见问题 84
8.3.1 数据质量挑战 84
8.3.2 数据库设计问题 87
8.3.3 数据架构问题 88
8.3.4 过程错误 90
8.4 使用遗留数据的策略 91
8.4.1 尽量避免使用遗留数据 92
8.4.2 开发一种数据错误处理策略 92
8.4.3 迭代和增量式地工作 92
8.4.4 优先考虑只读的遗留数据访问 93
8.4.5 封装遗留数据访问 94
8.4.6 为简单的遗留访问引入数据适配器 94
8.4.7 为复杂的数据访问引入中间数据库 95
8.4.8 采用现有的工具 96
8.5 数据集成技术 96
8.6 总结 97
第二部分第9章 革命万岁 100
9.1 方法灵活性的需要 100
9.2 谨防面向数据的BDUF 101
9.3 针对项目的渐进式开发 103
9.4 事物的“自然顺序”和渐进式开发 106
9.5 总结 107
第10章 敏捷模型驱动开发 108
10.1 敏捷DBA的角色 108
10.2 什么是敏捷建模 108
10.2.1 AM价值观 109
10.2.2 AM原则 109
10.2.3 敏捷建模实践 111
10.3 什么时候模型才算敏捷 112
10.4 什么是敏捷模型驱动开发 113
10.5 敏捷文档 113
10.6 总结 115
第11章 测试驱动开发 116
11.1 TDD是如何工作的 116
11.2 TDD的步骤 117
11.3 TDD与传统测试 118
11.4 TDD与文档 119
11.5 测试驱动的数据库开发 119
11.6 TDD与AMDD 120
11.7 总结 121
第12章 数据库重构 122
12.1 重构 122
12.2 数据库重构 123
12.2.1 保持语义 124
12.2.2 什么不是数据库重构 124
12.2.3 数据库重构类别 125
12.3 为什么数据库难以重构 125
12.4.1 步骤1:在开发沙箱中开始 127
12.4 如何重构数据库 127
12.4.2 步骤2:在集成沙箱中实现代码 133
12.4.3 步骤3:实地安装代码 134
12.5 常见的数据库重构味道 134
12.6 在你的组织机构内采用数据库重构 135
12.7 数据库重构最佳实践 136
12.8 现实中的数据库重构 137
12.9 总结 137
13.1 数据库封装层 139
第13章 数据库封装策略 139
13.2 敏捷DBA的角色 140
13.3 封装层的架构 141
13.4 封装层的实现策略 142
13.4.1 蛮力方式(并非一种封装策略) 142
13.4.2 数据访问对象 144
13.4.3 持久化框架 145
13.4.4 服务 148
13.4.5 每种策略的适用场合 150
13.4.6 策略间的转化 151
13.5 整编和数据验证 152
13.6 错误处理 152
13.7 总结 153
第14章 对象-关系数据库映射 154
14.1 敏捷DBA的角色 154
14.2 基本的映射概念 155
14.2.1 影子信息 157
14.3 映射继承结构 159
14.2.2 映射元数据 159
14.3.1 将整个类层次体系映射成一个表 161
14.3.2 将每个具体类映射成它自己的表 162
14.3.3 将每个类映射成它自己的表 162
14.3.4 将类映射成一个通用结构 163
14.3.5 映射策略的对比 164
14.3.6 多继承的映射 165
14.4 映射对象的关系 166
14.4.2 如何实现对象间的关系 167
14.4.1 关系的类型 167
14.4.3 如何在关系数据库内实现关系 169
14.4.4 关系映射 170
14.4.5 映射有序集合 173
14.4.6 映射递归关系 175
14.5 映射类作用范围的特性 175
14.6 为何数据方案不应该驱动对象方案 177
14.7 对对象的实现影响 179
14.9 映射模式化 180
14.8 模型驱动架构的启示 180
14.10 总结 181
第15章 性能优化 183
15.1 性能优化概述 183
15.2 敏捷DBA的角色 184
15.3 步骤1:识别性能问题 184
15.4 步骤2:剖析问题 184
15.5 步骤3:优化解决问题 185
15.5.1 系统优化 185
15.5.2 数据库访问优化 186
15.5.3 数据库优化 188
15.5.4 应用程序优化 193
15.6 总结 195
第16章 渐进式数据库开发的工具 196
16.1 工具 196
16.2 沙箱 198
16.3 脚本 199
16.4 总结 200
第三部分 实用的面向数据的开发方法第17章 实现并发控制 202
17.1 敏捷DBA的角色 202
17.2 冲突 202
17.2.1 锁定类型 203
17.2.2 解决冲突 205
17.3 解事务 206
17.3.1 事务的基本概念 207
17.3.2 实现事务 208
17.4 总结 212
第18章 在关系数据库内查找对象 213
18.1 敏捷DBA的角色 213
18.2 查找策略 213
18.2.1 蛮力方式(嵌入式SQL) 213
18.2.2 查询对象 214
18.2.3 元数据驱动 215
18.2.4 每种策略的应用时机 216
18.3.2 能够预见“逻辑”错误 217
18.3 实现方法 217
18.3.1 使用原生的错误处理策略 217
18.3.3 总是返回一个集合 218
18.3.4 针对查询列表采用代理和惰性初始化 218
18.3.5 对高开销的属性使用惰性读取 218
18.3.6 为他人编程 219
18.4 表示查找的结果 219
18.5 总结 221
第19章 实现引用完整性和共享的业务逻辑 222
19.1 敏捷DBA的角色 222
19.2 对象技术是如何将引用完整性复杂化的 222
19.2.1 多种实体/关系的表现形式 224
19.2.2 对象关系管理 224
19.2.3 惰式读取 226
19.2.4 缓存 227
19.2.5 聚合、组合和关联 227
19.2.7 从内存中移除与永久删除 228
19.2.6 架构分层 228
19.3 应该在何处实现引用完整性 229
19.3.1 引用完整性的实现选择 229
19.3.2 业务逻辑的实现选择 231
19.3.3 通用实现策略 232
19.4 总结 232
20.1 敏捷DBA的角色 233
20.2 身份验证 233
第20章 实现安全访问控制 233
20.3 授权 234
20.3.1 问题 234
20.3.2 数据库实现策略 235
20.3.3 安全设计模式 237
20.3.4 面向对象的实现策略 238
20.3.5 启示 240
20.4 有效的安全策略 240
20.5 总结 241
21.1 敏捷DBA的角色 243
第21章 实现报表 243
21.2 数据库部署架构 244
21.3 在应用程序内部进行报表统计 246
21.4 在应用程序外部进行报表统计 248
21.5 数据库设计策略 248
21.6 实现策略 249
21.7 使报表统计变难的挑战 250
21.8 总结 250
22.2 XML入门 252
第22章 现实中的XML 252
22.1 敏捷DBA的角色 252
22.2.1 XML的优势 254
22.2.2 XML的弱点 255
22.3 XML的实际应用 256
22.4 词汇表 256
22.5 如何建模XML 258
22.6 XML映射和数据绑定 260
22.8 如何在XML数据库中持久化XML 262
22.7 如何在关系数据库中持久化XML 262
22.9 XML开发策略 264
22.10 总结 264
第四部分 采用敏捷数据库方法第23章 你如何才能变得敏捷 268
23.1 不必非要做一个超人 268
23.2 敏捷性其实只是一个思维集 268
23.3 成为一名博学型的专家 269
23.4 总结 270
第24章 将敏捷性带到你的组织机构中 271
24.1 改变你看待软件开发的方式 271
24.2 理解你所面对的挑战 272
24.3 实际去尝试它 273
24.4 阻止非敏捷的合作者 273
24.5 切合实际 274
24.6 临别感想 275
附录 数据库重构目录 276
参考资料及推荐读物 286