第1章 数据库概念简介 1
1.1数据库设计阶段 2
1.1.1概念阶段 3
1.1.2逻辑阶段 5
1.1.3实现阶段 5
1.1.4物理阶段 6
1.2关系数据结构 6
1.2.1数据库和模式 6
1.2.2表、行和列 7
1.2.3信息原则 10
1.2.4域 12
1.2.5元数据 13
1.2.6键 13
1.2.7未显式赋值的项(NULL) 18
1.3实体之间的关系 20
1.3.1二元关系 21
1.3.2非二元关系 24
1.4数据访问语言(SQL) 24
1.5理解依赖性 25
1.5.1函数依赖性 26
1.5.2判定 26
1.6总结 27
第2章 数据建模语言 28
2.1数据建模介绍 28
2.2实体 29
2.3属性 32
2.3.1主键 33
2.3.2替代键 35
2.3.3外键 35
2.3.4域 36
2.3.5命名 38
2.4关系 39
2.4.1识别性关系 40
2.4.2非识别性关系 40
2.4.3角色名字 43
2.4.4关系基数 44
2.4.5动词短语(关系名字) 49
2.5描述信息 51
2.6其他建模方法 52
2.6.1信息工程 53
2.6.2 Chen ERD 54
2.6.3 Visio 55
2.6.4 Management Studio数据库关系图 56
2.7最佳实践 57
2.8总结 57
第3章 概念阶段数据建模 59
3.1理解需求 60
3.2文档化过程 61
3.3需求收集 62
3.3.1客户访谈 63
3.3.2要回答的问题 64
3.3.3现存的系统和原型 67
3.3.4其他类型的文档 67
3.4识别对象和过程 69
3.4.1识别实体 70
3.4.2实体间关系 76
3.4.3识别属性和域 82
3.5识别业务规则和业务过程 90
3.5.1识别业务规则 90
3.5.2识别基础业务过程 92
3.6完成概念模型 93
3.6.1识别明显的、额外的数据需求 94
3.6.2和客户一起评审 95
3.6.3重复以上步骤直到客户同意你的模型 95
3.7最佳实践 95
3.8总结 96
第4章 规范化过程 97
4.1为什么要规范化 98
4.1.1消灭重复数据 98
4.1.2避免编写不必要的代码 98
4.1.3给表瘦身 98
4.1.4最大化聚集索引的使用 99
4.1.5降低每张表中索引的数量 99
4.2规范化应该走多远 99
4.3规范化过程 100
4.4实体和属性的形式:第一范式 100
4.4.1所有属性必须是原子的 101
4.4.2实体的所有实例必须包含相同数量的值 104
4.4.3实体中出现的所有实体类型都必须不同 106
4.4.4第一范式所避免的不规则编程 106
4.4.5当前设计不符合第一范式的线索 110
4.5属性间的关系 111
4.5.1第二范式 111
4.5.2第三范式 116
4.5.3 Boyce-Codd范式 121
4.6实体中的多值依赖 124
4.6.1第四范式 124
4.6.2第五范式 135
4.7非规范化 136
4.8最佳实践 136
4.9总结 137
4.10额外的例子 137
4.11本书迄今为止所讲述的故事 142
第5章 实现基础的表结构 144
5.1评审逻辑设计 147
5.2变换设计 148
5.2.1选择名字 148
5.2.2处理子类型 151
5.2.3决定树的实现方式 155
5.2.4选择键的实现方式 156
5.2.5决定域的实现方式 161
5.2.6设置模式 172
5.2.7评审“最终的”实现模型 172
5.3实现设计 173
5.3.1创建基本表结构 175
5.3.2添加唯一性约束 183
5.3.3构建默认约束 189
5.3.4添加关系(外键) 195
5.3.5处理排序规则和排序 205
5.3.6计算列 209
5.3.7实现用户定义的数据类型 212
5.3.8文档化你的数据库 220
5.3.9处理依赖信息 222
5.4最佳实践 225
5.5总结 226
第6章 保护数据的完整性 228
6.1最佳实践 229
6.2自动数据保护 231
6.2.1声明性数据保护 231
6.2.2基本语法 233
6.2.3基于简单表达式的CHECK约束 235
6.2.4基于函数的CHECK约束 237
6.2.5约束引起的错误 242
6.2.6 DML触发器 244
6.2.7处理来自触发器和约束的错误 277
6.3手动数据保护 280
6.4更多最佳实践 287
6.5总结 287
第7章 模式与查询技术 289
7.1预计算值 290
7.1.1序列表 290
7.1.2日期计算 297
7.2二进制大型对象(BLOB) 305
7.3存储用户自定义数据 307
7.3.1一长串通用列 308
7.3.2实体-属性-值(EAV) 309
7.3.3往表中增加列 313
7.4通用实现对象 318
7.5反模式 319
7.5.1多用途键域 320
7.5.2通用键引用 322
7.5.3对非结构化数据的过度使用 325
7.6总结 326
7.7回顾与展望 326
第8章 数据访问安全 328
8.1安全主体与安全对象 329
8.2数据库安全概述 330
8.2.1模拟 331
8.2.2权限 333
8.2.3控制对象访问 334
8.2.4角色 338
8.2.5模式 344
8.3通过T-SQL编程对象控制对象访问 345
8.3.1存储过程和标量函数 346
8.3.2对象内模拟 347
8.3.3跨数据库边界 352
8.3.4不同的服务器(分布式查询) 357
8.4视图与表值函数 357
8.4.1一般用法 358
8.4.2使用视图实现可配置的行级安全 360
8.5数据混淆 364
8.6监视与审核 367
8.6.1服务器与数据库审核 367
8.6.2使用DML触发器查看表的变更历史 371
8.6.3 DDL触发器 374
8.6.4分析器日志 377
8.7最佳实践 379
8.8总结 380
第9章 表结构与索引 382
9.1数据库物理结构 383
9.1.1文件与文件组 383
9.1.2分区与页 386
9.1.3页中的数据 388
9.1.4分区 391
9.2索引概览 393
9.3基本索引结构 393
9.4索引类型 395
9.4.1聚集索引 395
9.4.2非聚集索引 397
9.4.3聚集表上的非聚集索引 398
9.5索引创建的基本方法 400
9.6基本的索引使用模式 402
9.6.1使用聚集索引 403
9.6.2使用非聚集索引 405
9.6.3使用唯一索引 416
9.7高级的索引使用案例 416
9.7.1外键索引 416
9.7.2索引视图 419
9.8最佳实践 422
9.9总结 423
第10章 并发编程 425
10.1什么是并发 426
10.2查询优化的基础知识 427
10.3操作系统与硬件因素 428
10.4事务 429
10.4.1事务语法 430
10.4.2已编译的SQL Server代码 437
10.5 SQL Server并发控制 444
10.5.1锁 445
10.5.2隔离级别 448
10.6完整性与并发性编程 459
10.6.1悲观锁定 459
10.6.2实现单线程代码块 461
10.6.3乐观锁定 463
10.6.4基于行的锁定 464
10.6.5逻辑工作单元 469
10.7最佳实践 470
10.8总结 471
第11章 数据访问策略 472
11.1即席SQL 473
11.1.1优点 474
11.1.2缺陷 480
11.2存储过程 484
11.2.1封装性 485
11.2.2动态存储过程 486
11.2.3安全性 488
11.2.4性能 490
11.2.5缺陷 491
11.2.6观点 495
11.3 T-SQL与CLR(公共语言运行时) 497
11.3.1选择T-SQL的准则 500
11.3.2选择.NET的准则 501
11.3.3 CLR对象类型 501
11.4最佳实践 503
11.5总结 504
附录A Codd的RDBMS十二法则 506
附录B 标量数据类型参考 511
索引 538