内容简介 1
第1部分 入门 1
第1章 数据库设计 1
1.1 关系数据库发展历程简介 1
1.1.1 SQL Server:背景和起源 2
1.1.2 SQL Server适合哪些领域 3
1.1.3 SQL Server的不同版本 4
1.1.4 支持的平台 5
1.2 数据建模 5
1.2.1 数据建模的步骤 6
1.2.2 需求收集 9
1.2.3 用户的观点 9
1.2.4 标识实体 10
1.3 Strawberry Smoooches公司 10
第2章 实体关系建模 12
2.1 实体建模介绍 12
2.2.1 二元关系 19
2.2 ERD示例 19
2.2.2 三元关系 21
2.2.3 递归关系 22
2.2.4 弱实体 23
2.2.5 类-子类关系 24
2.3 Strawberry Smoooches:实体模型 24
第3章 设计原则 26
3.1 逻辑建模 26
3.1.1 数据的规范化 28
3.1.2 规范和业务标准 29
3.1.3 规范化的准则 30
3.1.4 规范化、性能和安全 37
3.2 四个完整性 38
3.2.1 实体完整性 39
3.2.2 引用完整性 39
3.2.3 域完整性 41
3.2.4 业务完整性 43
3.3 数据库设计的道德规范 43
3.3.2 错误信息 44
3.3.3 安全和秘密 44
3.3.1 信息收集和隐私问题 44
3.3.4 为何社会安全号码不是作为主键的一个好选择 45
3.3.5 在道德问题上程序员的责任 46
第4章 规划物理实现 48
4.1 物理设计 48
4.1.1 逆规范化设计 48
4.1.2 增添附加属性 55
4.1.3 赋予厂商特定的数据类型 55
4.1.4 建立代理主键 56
4.1.6 评价增强的引用完整性 57
4.1.5 确立候选关键字 57
4.1.7 确定候选索引 58
4.2 映射ERD到表结构 59
第2部分 实现 63
第5章 实现设计 63
5.1 创建数据库 63
5.1.1 SQL Server用于创建数据库的工具 64
5.1.2 规划数据库的规模 65
5.1.3 调整模型数据库 65
5.1.4 数据库文件组 66
5.1.5 创建数据库 69
5.2 管理数据库增长 70
5.3 缩减数据库 71
5.3.1 删除数据库 72
5.3.2 连接和断开数据库 72
5.4 数据库配置选项 73
第6章 建立表 78
6.1 SQL Server 2000中的数据类型 78
6.1.1 系统提供的数据类型 78
6.1.2 用户自定义数据类型 84
6.1.3 关于DATETIME类型的问题 86
6.2 创建表 86
6.2.1 理解数据存储及分配 87
6.2.2 使用T-SQL创建表 90
6.2.3 标识属性 90
6.2.4 全局惟一标识符 91
6.3 表的维护 91
6.3.1 增加或删除列 92
6.3.3 从数据库中删除表 93
6.3.4 临时表 93
6.3.2 删除表中的数据 93
6.4 对象的隶属关系 95
第3部分 信息检索 96
第7章 数据检索 96
7.1 Query Analyzer窗口简介 97
7.1.1 Object Browser窗口 101
7.1.2 Object Search窗口 101
7.2 简单SELECT语句 103
7.2.1 注释代码 104
7.2.2 格式化输出 105
7.3 数据处理 113
7.3.1 算术计算 114
7.3.2 数学函数 115
7.3.3 日期时间计算 116
7.4 查询中的搜索准则 118
7.4.1 限定操作 118
7.4.2 布尔运算AND、OR、NOT 118
7.4.4 值的范围 120
7.4.3 约束运算符IN 120
7.4.5 搜索字符数据 122
第8章 连接:合并多个表中的数据 124
8.1 内部连接 124
8.1.1 使用表别名 125
8.1.2 生成执行规划 126
8.2 多表连接 128
8.3 同等连接和自然连接 130
8.4.1 左外部连接 131
8.4 外部连接 131
8.4.2 右外部连接 132
8.4.3 完全外部连接 133
8.4.4 连接中的NULL 134
8.5 交叉连接 138
8.6 自连接 139
8.7 联合运算符 140
8.8 半连接 141
8.9 合并连接 142
8.10 哈希连接 142
9.1.1 COUNT()函数 144
9.1 合计函数 144
第9章 数据汇总和报表 144
9.1.2 SUM()和AVG()函数 145
9.1.3 MIN()和MAX()函数 146
9.2 GROUP BY汇总函数 147
9.2.1 GROUP BY ALL 151
9.2.2 GROUP BY对多列进行分组 152
9.2.3 GROUP BY...HAVING 156
9.3 COMPUTE BY合计函数 157
9.4 ROLLUP和CUBE函数 160
9.5 TOP n数值查询 164
第10章 数据修改 167
10.1 插入命令 167
10.1.1 按位置插入 167
10.1.2 按列名插入 168
10.1.3 从其他表中插入数据 169
10.1.4 从存储过程插入数据 170
10.1.5 用SELECT INTO语句创建表 172
10.2 删除 173
10.3 截断表 174
10.4 更新 175
10.4.1 自动编号列的值 178
10.4.2 用GUID插入记录 184
10.5 层叠更新和删除 186
第11章 子查询 188
11.1 简单子查询 188
11.2 相关子查询 195
11.3 EXISTS条件 197
11.4 基于查询结果来修改数据 205
11.4.1 插入 205
11.4.3 更新 206
11.4.2 删除 206
第12章 视图 208
12.1 什么是视图 208
12.2 为何使用视图 209
12.3 如何定义视图 210
12.4 更改和删除视图 213
12.5 通过视图修改数据 215
12.5.1 不可更新视图 217
12.5.2 WITH CHECK选项 217
12.6 SQL 2000新特性:索引视图 218
12.7 分割视图 219
第4部分 通过编程提高性能 222
第13章 事务介绍 222
13.1 什么是事务 222
13.1.1 启动、提交和回滚 223
13.1.2 锁简介 226
13.2 事务日志 227
13.2.1 检查点 228
13.2.3 保存点 229
13.2.2 lazy writer和worker线程 229
13.3 嵌套事务 231
13.4 隐式事务 232
13.5 分布式事务 235
13.5.1 长时间运行的事务 236
13.5.2 编写事务的几点建议 237
第14章 锁 239
14.1 用锁解决潜在问题 239
14.1.1 丢失更新(覆盖更新) 239
14.1.3 不一致分析(不可重复读和幻觉记录) 240
14.1.2 非提交相关性(脏读) 240
14.2 SQL Server锁 241
14.2.1 共享锁 243
14.2.2 排他锁 243
14.2.3 更新锁 243
14.2.4 意图锁 243
14.2.5 系统锁 244
14.2.6 死锁 244
14.3 如何检测锁问题 245
14.4 设置锁选项 246
14.4.1 NOLOCK选项 248
14.4.2 事务隔离级别及如何实现 249
第15章 数据完整性 256
15.1 缺省和规则 256
15.1.1 创建缺省和规则 257
15.1.2 绑定缺省和规则 258
15.1.3 取消规则和缺省的绑定 261
15.1.4 为什么不使用缺省和规则 261
15.2 约束 262
15.2.1 列级约束和表级约束 263
15.2.2 主键 264
15.2.3 惟一约束 266
15.2.4 外键约束 267
15.2.5 缺省约束 270
15.2.6 检查约束 272
15.2.7 检查已有数据 274
15.2.9 NOT FOR REPLICATION选项 275
15.3 约束、缺省和规则 275
15.2.8 启用和禁止约束 275
15.4 约束和触发器 276
第16章 索引 277
16.1 什么是索引 277
16.1.1 什么时候使用索引 277
16.1.2 什么时候不用索引 277
16.1.3 怎样才是好索引 278
16.1.4 如何确定哪个索引正在被使用 279
16.2 索引文件存储 279
16.2.2 簇索引 280
16.2.1 堆 280
16.2.3 非簇索引 281
16.2.4 使用簇索引还是非簇索引 282
16.3 索引类型 282
16.3.1 惟一索引 282
16.3.2 非惟一索引 282
16.3.3 复合索引 282
16.3.4 覆盖索引 283
16.4 创建索引 283
16.4.1 装填因子和填充索引 285
16.4.2 索引统计 286
16.4.3 产生索引碎片报告 287
16.4.4 删除索引 288
16.4.5 索引重建命令 288
16.5 SQL Server 2000中的新特性:索引的物理视图 289
16.6 索引优化 289
第17章 存储过程 291
17.1 什么是存储过程 291
17.2 创建存储过程 291
17.2.1 通过图形工具创建存储过程 293
17.2.2 临时存储过程 294
17.4 存储过程的参数化 295
17.4.1 传递参数 295
17.3 过程高速缓存 295
17.4.2 返回参数 297
17.5 更改和删除存储过程 299
17.6 重编译选项 300
17.7 处理错误信息 301
17.7.1 加入自定义错误信息 302
17.7.2 使用错误信息 305
17.8 扩展存储过程 306
17.7.3 特别的错误信息 306
17.9 存储过程的安全问题 307
17.10 远程存储过程 307
17.11 自动存储过程 310
第18章 触发器 311
18.1 触发器简介 311
18.2 创建触发器 313
18.3 修改和删除触发器 318
18.3.1 禁止和启用触发器 319
18.3.2 IF UPDATE() 320
18.4 INSTEAD OF触发器 321
18.5 触发器和约束 325
18.5.1 触发器和引用完整性 325
18.5.2 用于层叠删除和更新的触发器 326
18.5.3 嵌套或非嵌套触发器 326
18.5.4 递归触发器 327
18.6 性能问题 331
第19章 分布式数据与复制 335
19.1 为什么使用分布式数据 335
19.1.2 数据转换服务(DTS) 336
19.1.1 日志迁移(log-shipping) 336
19.1.3 远程查询和存储过程 337
19.1.4 分布式事务 337
19.2 复制 338
19.2.1 复制术语 338
19.2.2 为复制作数据分割 340
19.2.3 复制方案 340
19.2.4 复制的拓扑结构 344
19.2.7 分布数据的原则 352
19.2.5 复制的安全问题 352
19.2.6 为复制做准备 352
第5部分 数据模型和推荐读物 354
附录A Strawberry Smoooches公司产品配方 354
附录B Strawberry Smoooches公司概念数据模型 355
附录C Strawberry Smoooches公司逻辑数据模型 356
附录D Strawberry Smoooches公司物理数据模型 357
附录E Strawberry Smoooches公司数据库:数据定义语言(DDL)和数据 358
E.1 数据定义语言 358
E.1.1 创建Strawberry数据库 358
E.1.2 创建表 359
E.1.3 创建主键约束 363
E.1.4 创建外键约束 365
E.1.5 创建索引 368
E.2 Strawberry Smoooches公司数据 370
E.2.1 Person表 370
E.2.2 CommDevice表 371
E.2.3 Employee表 372
E.2.4 SalesPerson表 372
E.2.6 EventContact表 373
E.2.5 Contact表 373
E.2.7 Event表 374
E.2.8 Product表 375
E.2.9 Vendor表 375
E.2.10 Supply表 375
E.2.11 Inventory表 376
E.2.12 Manufacturing表 377
E.2.13 WorkAssignment表 377
E.2.15 Saleltem表 380
E.2.14 Sale表 380
附录F 参考文献和推荐读物 382
F.1 数据建模 382
F.2 数据库和系统基础 382
F.3 保密和安全 382
F.4 SQL编程 383
F.5 SQL Server内幕和管理 383
F.6 Osborne/McGraw-Hill SQL Server 2000系列从书 383
F.7 参考文献 384