《SQL反模式》是一本广受好评的SQL图书。它介绍了如何避免在SQL的使用和开发中陷入一些常见却经常被忽略的误区。它通过讲述各种具体的案例,以及开发人员和使用人员在面对这些案例时经常采用的错误解决方案,来介绍如何识别、利用这些陷阱,以及面对问题时正确的解决手段。另外,《SQL反模式》还涉及了SQL的各级范式和针对它们的正确理解。
《SQL反模式》适合SQL数据库开发人员与管理人员阅读。
第1 章 引言1
1.1 谁需要这本书2
1.2 本书内容2
1.2.1 本书结构3
1.2.2 反模式分解4
1.3 本书未涉及的内容4
1.4 规约5
1.5 范例数据库6
1.6 致谢8
第一部分 逻辑型数据库设计反模式
第2 章 乱穿马路10
2.1 目标:存储多值属性11
2.2 反模式:格式化的逗号分隔列表11
2.2.1 查询指定账号的产品11
2.2.2 查询指定产品的账号12
2.2.3 执行聚合查询12
2.2.4 更新指定产品的账号12
2.2.5 验证产品ID 13
2.2.6 选择合适的分隔符13
2.2.7 列表长度限制13
2.3 如何识别反模式14
2.4 合理使用反模式14
2.5 解决方案:创建一张交叉表14
2.5.1 通过账号查询产品和反过来查询15
2.5.2 执行聚合查询16
2.5.3 更新指定产品的相关联系人16
2.5.4 验证产品ID 16
2.5.5 选择分隔符17
2.5.6 列表长度限制 17
2.5.7 其他使用交叉表的好处17
第3 章 单纯的树18
3.1 目标:分层存储与查询18
3.2 反模式:总是依赖父节点 19
3.2.1 使用邻接表查询树 20
3.2.2 使用邻接表维护树 21
3.3 如何识别反模式22
3.4 合理使用反模式23
3.5 解决方案:使用其他树模型 24
3.5.1 路径枚举24
3.5.2 嵌套集26
3.5.3 闭包表29
3.5.4 你该使用哪种设计 33
第4 章 需要ID 34
4.1 目标:建立主键规范 35
4.2 反模式:以不变应万变36
4.2.1 冗余键值 36
4.2.2 允许重复项 37
4.2.3 意义不明的关键字 38
4.2.4 使用USING 关键字 38
4.2.5 使用组合键之难39
4.3 如何识别反模式 39
4.4 合理使用反模式40
4.5 解决方案:裁剪设计 40
4.5.1 直截了当地描述设计40
4.5.2 打破传统 41
4.5.3 拥抱自然键和组合键41
第5 章 不用钥匙的入口43
5.1 目标:简化数据库架构43
5.2 反模式:无视约束44
5.2.1 假设无瑕代码44
5.2.2 检查错误45
5.2.3 “那不是我的错!”45
5.2.4 进退维谷 46
5.3 如何识别反模式46
5.4 合理使用反模式47
5.5 解决方案:声明约束47
5.5.1 支持同步修改48
5.5.2 系统开销过度?不见得48
第6 章 实体—属性—值50
6.1 目标:支持可变的属性50
6.2 反模式:使用泛型属性表51
6.2.1 查询属性53
6.2.2 支持数据完整性53
6.2.3 无法声明强制属性53
6.2.4 无法使用SQL 的数据类型53
6.2.5 无法确保引用完整性54
6.2.6 无法配置属性名55
6.2.7 重组列55
6.3 如何识别反模式56
6.4 合理使用反模式56
6.5 解决方案:模型化子类型57
6.5.1 单表继承57
6.5.2 实体表继承58
6.5.3 类表继承60
6.5.4 半结构化数据模型61
6.5.5 后处理61
第7 章 多态关联64
7.1 目标:引用多个父表65
7.2 反模式:使用双用途外键65
7.2.1 定义多态关联65
7.2.2 使用多态关联进行查询66
7.2.3 非面向对象范例67
7.3 如何识别反模式68
7.4 合理使用反模式69
7.5 解决方案:让关系变得简单 69
7.5.1 反向引用69
7.5.2 创建交叉表 69
7.5.3 设立交通灯 70
7.5.4 双向查找71
7.5.5 合并跑道71
7.5.6 创建共用的超级表 72
第8 章 多列属性 75
8.1 目标:存储多值属性 75
8.2 反模式:创建多个列 76
8.2.1 查询数据76
8.2.2 添加及删除值 77
8.2.3 确保唯一性 78
8.2.4 处理不断增长的值集78
8.3 如何识别反模式79
8.4 合理使用反模式79
8.5 解决方案:创建从属表80
第9 章 元数据分裂 82
9.1 目标:支持可扩展性 83
9.2 反模式:克隆表与克隆列 83
9.2.1 不断产生的新表 84
9.2.2 管理数据完整性 84
9.2.3 同步数据 85
9.2.4 确保唯一性 85
9.2.5 跨表查询 86
9.2.6 同步元数据 86
9.2.7 管理引用完整性 86
9.2.8 标识元数据分裂列 87
9.3 如何识别反模式87
9.4 合理使用反模式88
9.5 解决方案:分区及标准化 89
9.5.1 使用水平分区 89
9.5.2 使用垂直分区 89
9.5.3 解决元数据分裂列 91
第二部分 物理数据库设计反模式
第10 章 取整错误 94
10.1 目标:使用小数取代整数 94
10.2 反模式:使用FLOAT 类型95
10.2.1 舍入的必要性95
10.2.2 在SQL 中使用FLOAT96
10.3 如何识别反模式98
10.4 合理使用反模式98
10.5 解决方案:使用NUMERIC 类型98
第11 章 每日新花样100
11.1 目标:限定列的有效值100
11.2 反模式:在列定义上指定可选值101
11.2.1 中间的是哪个102
11.2.2 添加新口味103
11.2.3 老的口味永不消失103
11.2.4 可移植性低下103
11.3 如何识别反模式104
11.4 合理使用反模式104
11.5 解决方案:在数据中指定值104
11.5.1 查询候选值集合105
11.5.2 更新检查表中的值105
11.5.3 支持废弃数据105
11.5.4 良好的可移植性106
第12 章 幽灵文件107
12.1 目标:存储图片或其他多媒体大文件107
12.2 反模式:假设你必须使用文件系统108
12.2.1 文件不支持DELETE109
12.2.2 文件不支持事务隔离109
12.2.3 文件不支持回滚操作109
12.2.4 文件不支持数据库备份工具110
12.2.5 文件不支持SQL 的访问权限设置110
12.2.6 文件不是SQL 数据类型110
12.3 如何识别反模式111
12.4 合理使用反模式111
12.5 解决方案:在需要时使用BLOB 类型112
第13 章 乱用索引114
13.1 目标:优化性能115
13.2 反模式:无规划地使用索引115
13.2.1 无索引115
13.2.2 索引过多116
13.2.3 索引也无能为力117
13.3 如何识别反模式118
13.4 合理使用反模式119
13.5 解决方案:MENTOR 你的索引119
13.5.1 测量120
13.5.2 解释121
13.5.3 挑选122
13.5.4 测试123
13.5.5 优化123
13.5.6 重建123
第三部分 查询反模式
第14 章 对未知的恐惧126
14.1 目标:辨别悬空值127
14.2 反模式:将NULL 作为普通的值,反之亦然127
14.2.1 在表达式中使用NULL 127
14.2.2 搜索允许为空的列128
14.2.3 在查询参数中使用NULL 128
14.2.4 避免上述问题128
14.3 如何识别反模式130
14.4 合理使用反模式130
14.5 解决方案:将NULL 视为特殊值131
14.5.1 在标量表达式中使用NULL 131
14.5.2 在布尔表达式中使用NULL 132
14.5.3 检索NULL 值132
14.5.4 声明NOT NULL 的列133
14.5.5 动态默认值134
第15 章 模棱两可的分组135
15.1 目标:获取每组的最大值135
15.2 反模式:引用非分组列136
15.2.1 单值规则136
15.2.2 我想要的查询137
15.3 如何识别反模式138
15.4 合理使用反模式139
15.5 解决方案:无歧义地使用列140
15.5.1 只查询功能依赖的列140
15.5.2 使用关联子查询140
15.5.3 使用衍生表140
15.5.4 使用JOIN141
15.5.5 对额外的列使用聚合函数142
15.5.6 连接同组所有值142
第16 章 随机选择144
16.1 目标:获取样本记录144
16.2 反模式:随机排序145
16.3 如何识别反模式146
16.4 合理使用反模式146
16.5 解决方案:没有具体的顺序146
16.5.1 从1 到最大值之间随机选择146
16.5.2 选择下一个最大值147
16.5.3 获取所有的键值,随机选择一个147
16.5.4 使用偏移量选择随机行148
16.5.5 专有解决方案149
第17 章 可怜人的搜索引擎150
17.1 目标:全文搜索150
17.2 反模式:模式匹配断言151
17.3 如何识别反模式152
17.4 合理使用反模式152
17.5 解决方案:使用正确的工具152
17.5.1 数据库扩展153
17.5.2 第三方搜索引擎157
第18 章 意大利面条式查询162
18.1 目标:减少SQL 查询数量162
18.2 反模式:使用一步操作解决复杂问题163
18.2.1 副作用163
18.2.2 那好像还不够???? 164
18.3 如何识别反模式165
18.4 合理使用反模式165
18.5 解决方案:分而治之166
18.5.1 一步一个脚印166
18.5.2 寻找UNION 标记167
18.5.3 解决老板的问题167
18.5.4 使用SQL 自动生成SQL 168
第19 章 隐式的列 170
19.1 目标:减少输入 171
19.2 反模式:捷径会让你迷失方向 171
19.2.1 破坏代码重构171
19.2.2 隐藏的开销172
19.2.3 你请求,你获得172
19.3 如何识别反模式 173
19.4 合理使用反模式 173
19.5 解决方案:明确列出列名174
19.5.1 预防错误174
19.5.2 你不需要它 175
19.5.3 无论如何你都需要放弃使用通配符 175
第四部分 应用程序开发反模式
第20 章 明文密码 178
20.1 目标:恢复或重置密码 178
20.2 反模式:使用明文存储密码 179
20.2.1 存储密码179
20.2.2 验证密码180
20.2.3 在E-mail 中发送密码180
20.3 如何识别反模式 181
20.4 合理使用反模式 181
20.5 解决方案:先哈希,后存储 182
20.5.1 理解哈希函数182
20.5.2 在SQL 中使用哈希 183
20.5.3 给哈希加料183
20.5.4 在SQL 中隐藏密码 185
20.5.5 重置密码,而非恢复密码 186
第21 章 SQL 注入188
21.1 目标:编写SQL 动态查询189
21.2 反模式:将未经验证的输入作为代码执行189
21.2.1 意外无处不在 190
21.2.2 对Web 安全的严重威胁 190
21.2.3 寻找治愈良方 191
21.3 如何识别反模式 195
21.4 合理使用反模式 196
21.5 解决方案:不信任任何人196
21.5.1 过滤输入内容196
21.5.2 参数化动态内容197
21.5.3 给动态输入的值加引号197
21.5.4 将用户与代码隔离198
21.5.5 找个可靠的人来帮你审查代码200
第22 章 伪键洁癖202
22.1 目标:整理数据202
22.2 反模式:填充角落203
22.2.1 不按照顺序分配编号203
22.2.2 为现有行重新编号204
22.2.3 制造数据差异204
22.3 如何识别反模式205
22.4 合理使用反模式205
22.5 解决方案:克服心里障碍205
22.5.1 定义行号205
22.5.2 使用GUID206
22.5.3 最主要的问题207
第23 章 非礼勿视209
23.1 目标:写更少的代码210
23.2 反模式:无米之炊210
23.2.1 没有诊断的诊断210
23.2.2 字里行间211
23.3 如何识别反模式212
23.4 合理使用反模式213
23.5 解决方案:优雅地从错误中恢复213
23.5.1 保持节奏213
23.5.2 回溯你的脚步214
第24 章 外交豁免权215
24.1 目标:采用最佳实践215
24.2 反模式:将SQL 视为二等公民216
24.3 如何识别反模式216
24.4 合理使用反模式217
24.5 解决方案:建立一个质量至上的文化217
24.5.1 陈列A:编写文档218
24.5.2 寻找证据:源代码版本控制220
24.5.3 举证:测试222
24.5.4 例证:同时处理多个分支223
第25 章 魔豆225
25.1 目标:简化MVC 的模型226
25.2 反模式:模型仅仅是活动记录227
25.2.1 活动记录模式连接程序模型和数据库结构228
25.2.2 活动记录模式暴露了CRUD系列函数228
25.2.3 活动记录模式支持弱域模型229
25.2.4 魔豆难以进行单元测试231
25.3 如何识别反模式232
25.4 合理使用反模式232
25.5 解决方案:模型包含活动记录232
25.5.1 领会模型的意义233
25.5.2 将领域模型应用到实际工作中234
25.5.3 测试简单对象236
25.5.4 回到地球237
第五部分 附录
附录A 规范化规则240
附录B 参考书目252
《十力语要初续》内容简介:本书乃《十力语要》的续编,仍沿用《十力语要》旧例,辑录书札、论文、杂文等总计四十二篇,是了解熊十
《守正出奇》内容简介:对数字化传播的本质和特征的探讨,是《守正出奇:传统美妆品牌的数字化传播》的研究定位和目标;以美妆品牌
《成长力觉醒:探寻人生与职业幸福之路》内容简介:本书从个人对自我、对个人角色和使命,以及对如何成长发展三方面的认知,帮助实
《马克笔萌宠绘》内容简介:本书是一本讲解如何用马克笔画出特别又有趣的萌宠画教程。全书共有5章:第1章为马克笔绘画基础知识,不
《让学生快乐表达之行动研究》内容简介:2016年,世界教育创新峰会(WISE)与北京师范大学中国教育创新研究院共同发布了《面向未来
《Java EE核心框架实战》内容简介:本书旨在提高读者的学习效率,增强其项目实战能力。为此,本书摒弃了软件公司中不常用或不实用的
《最美中国故事(和谐篇)》内容简介:本书是“社会主义核心价值观系列连环画”中的小学十二种图书之一。小学十二种图书,每种围绕
视觉显著性检测方法及应用 内容简介 视觉显著性检测是计算机视觉领域近年来的一个研究热点,具有广泛的应用前景。本书介绍了视觉显著性检测的基本知识和现有方法,并系统...
Photoshop CS5数码照片处理从入门到精通-(全彩超值版)-(含1DVD) 本书特色 1张dvd光盘超值教学视频,素材和*终文件时长超过425分钟书中9...
Visual C#.NET程序设计教程(第2版) 本书特色 《Visual C#.NET程序设计教程(第2版普通高等学校计算机教育十二五规划教材)》(作者罗福强...
iOS开发如日中天,iOS6又为我们带来了大量的高级特性,从事移动开发的你,还等什么?本书急开发者之所急,揭秘了多数开发类图书未
《表达力》内容简介:在职场人微言轻,说话没有人听怎么办? 面对人群发言,感到非常紧张如何缓解? 如何用语言抓住别人的注意力,
电脑维修与技巧888问 内容简介 电脑已经成为人们生活中不可缺少的一部分。虽然大家都在使用电脑,但不是每个人都能够使用得得心应手,当电脑出故障时,许多人就束手无...
《嘻嘻哈哈陪娃图鉴·我们一起玩游戏》内容简介:本书写给家长们的陪娃手册,由北师大教育学博士李芳主编、针对3至6岁有宝宝的家庭
学术理论研究著作集萃.理工学科:基于本体数据库的多标签预测模型及生物医药数据挖掘研究 内容简介 《基于本体数据库的多标签预测模型及生物医药数据挖掘研究》共9章。...
《自己动手制作软体机器人》内容简介:软体机器人技术是一个新兴的领域,它以新的方式接近机器人,使机器人能够在非结构化或不稳定
周品编著的《MATLAB神经网络设计与应用(最新版)》以最新版MATLABR2012a为平台编写,结合高等学校教学对MATLAB及其在神经网络的应
关于作者JasonMcC.Smith,2005年毕业于北卡罗莱纳州立大学教堂山分校,获计算机科学博士学位。该校也是元素模式的诞生地,元素模
《SEM深度解析:搜索引擎营销及主流网站分析实战》内容简介:网络在我们的工作与生活中的地位是毋庸置疑的,我们每天都要通过搜索引
CATIA V5R20快速入门.进阶与精通-(含多媒体DVD光盘2张) 本书特色 本书是全面、系统学习和运用catia v5r20软件的快速入门、进阶与精通书籍...