第1章 数据库领域的软件开发方法学 1
1.1架构回顾 1
1.1.1耦合、内聚和封装 1
1.1.2接口 4
1.2核心问题:集成数据库和面向对象系统 6
1.2.1该何去何从 7
1.2.2对象-关系失配 10
1.3 ORM:一个问题多多的解决方案 14
1.4把数据库操作设计为API 15
1.5全面权衡 16
1.5.1可测试性 16
1.5.2可维护性 16
1.5.3安全性 17
1.5.4性能 17
1.5.5步履蹒跚的远期功能 18
1.6小结 18
第2章 数据库例程测试 19
2.1黑盒测试与白盒测试简介 19
2.1.1单元测试和功能测试 20
2.1.2单元测试框架 22
2.1.3回归测试的重要性 25
2.2实现数据库测试过程和测试例程的指导准则 25
2.2.1为什么说软件测试很重要 26
2.2.2哪种测试重要 26
2.2.3需要进行多少测试 26
2.2.4管理层是否愿意接受软件测试 27
2.3性能测试和数据库系统事件探查 28
2.3.1获取基准度量 28
2.3.2使用跟踪器及事件探查器进行查看 29
2.3.3评估性能计数器 31
2.3.4宏观分析 32
2.3.5粒度分析 32
2.3.6修正问题:仅仅关注明显的错误是否已经足够 33
2.4 SQLQueryStress性能测试工具介绍 34
2.5小结 37
第3章 错误和异常 38
3.1异常和错误 38
3.2 SQL Server中异常的工作原理 39
3.2.1语句级异常 39
3.2.2批处理程序级异常 40
3.2.3语法分析和作用域解析异常 41
3.2.4连接和服务器级异常 42
3.2.5 XACTABORT设置 42
3.2.6分析错误信息 43
3.2.7 SQL Server的RAISERROE函数 45
3.2.8跟踪监控异常事件 49
3.3异常处理 49
3.3.1为什么要在T-SQL中处理异常 50
3.3.2使用@@ERROR“处理”异常 50
3.3.3 SQL Server的TRY/CATCH语法 51
3.4事务与异常 56
3.4.1事务退出的神话 56
3.4.2 XACT_ ABORT:神话(半)成真 57
3.4.3TRY/CATCH和被诅咒事务 59
3.5小结 59
第4章 特权与授权 61
4.1最低特权原则 61
4.1.1在SQL Server中创建代理 62
4.1.2层级数据安全:洋葱模型 63
4.2使用Schema组织数据 64
4.3使用EXECUTE AS实现基本模拟 66
4.4所有权链 68
4.5非链式特权提升 69
4.5.1存储过程与EXECUTEAS 70
4.5.2使用证书对存储过程进行签名 71
4.6小结 75
第5章 加密 76
5.1要保护什么 77
5.2加密术语:我们需要知道的部分 78
5.3 SQL Server 2005加密密钥体系 79
5.3.1服务主密钥 79
5.3.2数据库主密钥 80
5.4 SQL Server 2005数据保护 81
5.4.1 HashBytes() 82
5.4.2非对称密钥加密和证书加密 82
5.4.3对称密钥加密 84
5.4.4 EncryptByPassphrase 91
5.5隔离数据与DBA 92
5.6性能优化设计 93
5.6.1设计解决方案、定义问题 94
5.6.2搜索加密数据 97
5.7小结 110
第6章SQLCLR:架构和设计注意事项 111
6.1填充SQL/CLR鸿沟:SglTypes库 111
6.2包装代码以提高跨层重用性 112
6.3 SQLCLR的安全性特征和可靠性特征 114
6.3.1代码安全性需求 117
6.3.2通过程序集引用有选择地提升特权 118
6.3.3授予交叉程序集特权 124
6.4利用SQLCLR加强Service Broker可扩展性功能 126
6.5扩展用户自定义聚合 136
6.6小结 141
第7章 动态T-SQL 142
7.1动态T-SQL与ad hoc T-SQL 142
7.2为什么要使用动态SQL 144
7.2.1编译与参数化 145
7.2.2自动参数化 146
7.2.3应用程序级参数化 148
7.2.4参数化与高速缓存的性能暗示 149
7.3支持可选参数 151
7.3.1通过静态T-SQL实现可选参数 151
7.3.2实现动态化:使用EXECUTE 157
7.3.3 SQL注入 162
7.3.4 sp_ executesgl:一个更好的EXECUTE 164
7.4动态SQL在安全方面的考虑 172
7.4.1被引用对象的权限 172
7.4.2接口规则 172
7.5小结 175
第8章 应用程序并发系统的设计 176
8.1从业务角度观察:进程产生冲突时会发生什么情况 176
8.1.1 SQL Server隔离级别概述 178
8.1.2并发控制与SQL Server提供的隔离级别 182
8.2做最坏的打算:悲观的并发 183
8.2.1在写入过程中使用悲观锁 188
8.2.2应用程序锁:对悲观并发控制机制进行泛化 189
8.3希望最好的情况发生:乐观的并发控制 199
8.4包容冲突:多值并发控制 203
8.5通过排队提高可扩展性 206
8.6小结 212
第9章 空间数据处理 213
9.1用纬度和经度表示地球空间数据 213
9.1.1设置示例数据 214
9.1.2计算两点之间的距离 216
9.1.3从一个位置点移动到另一个位置点 220
9.1.4邻近搜索 224
9.1.5边界框 230
9.1.6查找距离最近的邻近点 240
9.1.7动态边界框 243
9.1.8结论 252
9.2使用分层三角形网格表示地球空间数据 252
9.2.1 HTM的简化描述 253
9.2.2实现HtmID 256
9.2.3 Spatial数据库提供的函数 257
9.2.4结论 268
9.3其他类型的空间数据 268
9.3.1三维数据 268
9.3.2天文数据 269
9.3.3虚拟空间 269
9.3.4将区域表达为多边形 269
9.4小结 270
第10章 时态数据处理 271
10.1表达的不仅仅是时间 271
10.2 SQL Server提供的日期/时间数据类型 272
10.2.1日期输入格式 272
10.2.2格式化输出日期 275
10.2.3高效查询日期/时间列 276
10.2.4日期/时间计算 279
10.3使用日历表定义周期 284
10.4设计*时态数据存储方案及查询时态数据 292
10.4.1处理时区 293
10.4.2处理时间区间 299
10.4.3为持续时间建立模型 319
10.4.4管理双时态数据 320
10.5小结 323
第11章树、层次结构和图 324
11.1术语:万物皆为图 324
11.2基础知识:邻接表和图 325
11.2.1为边加入约束 326
11.2.2针对图的基本查询:给定一个结点,这个结点与其他哪些结点相连 328
11.2.3遍历图 329
11.3邻接表的层次结构 338
11.3.1查询邻接表层次结构:基础知识 339
11.3.2查找直接后代结点 339
11.3.3在层次结构中向下级层次遍历 341
11.3.4在层次结构中向上级层次遍历 349
11.3.5插入新结点并重新定位子树 350
11.3.6删除已有结点 351
11.3.7为层次结构加入约束 351
11.4持久保存具体化路径 354
11.4.1查找下级结点 355
11.4.2在层次结构中向上级层次导航 356
11.4.3对具体化路径解决方案进行优化 357
11.4.4插入结点 362
11.4.5重新定位子树 363
11.4.6删除结点 365
11.4.7为层次结构加入约束 365
11.5嵌套集模型 366
11.5.1查找下级结点 370
11.5.2在层次结构中向上级层次导航 371
11.5.3插入结点 371
11.5.4重新定位子树 373
11.5.5删除结点 377
11.5.6为层次结构加入约束 378
11.6小结 379