SQL 反模式 PDF 文档

发布于 2024-08-03 16:57:02 字数 7447 浏览 41 评论 0

本书是一本广受好评的 SQL 图书。它介绍了如何避免在 SQL 的使用和开发中陷入一些常见却经常被忽略的误区。它通过讲述各种具体的案例,以及开发人员和使用人员在面对这些案例时经常采用的错误解决方案,来介绍如何识别、利用这些陷阱,以及面对问题时正确的解决手段。另外,本书还涉及了 SQL 的各级范式和针对它们的正确理解。

本书适合 SQL 数据库开发人员与管理人员阅读。

毫无疑问,数据库领域当下最热门的概念是 NoSQL,我正在公司最新大型社区项目中实践NoSQL 产品,并准备在更大范围内推广优秀的 NoSQL 产品,而另一译者——陈魏明,则自己研发了一个 NoSQL 产品,应用在另一大型社区项目中,提供 Feed 系统的支持。

但是,正如 NoSQL 自身所宣扬的一样,任何一种 NoSQL 产品,甚至所有的 NoSQL 产品合在一起,它们的设计初衷绝不是解决掉所有的数据处理需求,它们追求的是为某一种或某几种数据处理场景选择最优的 CAP① 组合,提供最合适的解决方案。

目录
第 1 章 引言
1.1 谁需要这本书
1.2 本书内容
1.2.1 本书结构
1.2.2 反模式分解
1.3 本书未涉及的内容
1.4 规约
1.5 范例数据库
1.6 致谢
第 2 章 乱穿马路
2.1 目标:存储多值属性
2.2 反模式:格式化的逗号分隔列表
2.2.1 查询指定账号的产品
2.2.2 查询指定产品的账号
2.2.3 执行聚合查询
2.2.4 更新指定产品的账号
2.2.5 验证产品 ID
2.2.6 选择合适的分隔符
2.2.7 列表长度限制
2.3 如何识别反模式
2.4 合理使用反模式
2.5 解决方案:创建一张交叉表
2.5.1 通过账号查询产品和反过来查询
2.5.2 执行聚合查询
2.5.3 更新指定产品的相关联系人
2.5.4 验证产品 ID
2.5.5 选择分隔符
2.5.6 列表长度限制
2.5.7 其他使用交叉表的好处
第 3 章 单纯的树
3.1 目标:分层存储与查询
3.2 反模式:总是依赖父节点
3.2.1 使用邻接表查询树
3.2.2 使用邻接表维护树
3.3 如何识别反模式
3.4 合理使用反模式
3.5 解决方案:使用其他树模型
3.5.1 路径枚举
3.5.2 嵌套集
3.5.3 闭包表
3.5.4 你该使用哪种设计
第 4 章 需要 ID
4.1 目标:建立主键规范
4.2 反模式:以不变应万变
4.2.1 冗余键值
4.2.2 允许重复项
4.2.3 意义不明的关键字
4.2.4 使用 USING 关键字
4.2.5 使用组合键之难
4.3 如何识别反模式
4.4 合理使用反模式
4.5 解决方案:裁剪设计
4.5.1 直截了当地描述设计
4.5.2 打破传统
4.5.3 拥抱自然键和组合键
第 5 章 不用钥匙的入口
5.1 目标:简化数据库架构
5.2 反模式:无视约束
5.2.1 假设无瑕代码
5.2.2 检查错误
5.2.3 “那不是我的错!”
5.2.4 进退维谷
5.3 如何识别反模式
5.4 合理使用反模式
5.5 解决方案:声明约束
5.5.1 支持同步修改
5.5.2 系统开销过度?不见得
第 6 章 实体-属性-值
6.1 目标:支持可变的属性
6.2 反模式:使用泛型属性表
6.2.1 查询属性
6.2.2 支持数据完整性
6.2.3 无法声明强制属性
6.2.4 无法使用 SQL 的数据类型
6.2.5 无法确保引用完整性
6.2.6 无法配置属性名
6.2.7 重组列
6.3 如何识别反模式
6.4 合理使用反模式
6.5 解决方案:模型化子类型
6.5.1 单表继承
6.5.2 实体表继承
6.5.3 类表继承
6.5.4 半结构化数据模型
6.5.5 后处理
第 7 章 多态关联
7.1 目标:引用多个父表
7.2 反模式:使用双用途外键
7.2.1 定义多态关联
7.2.2 使用多态关联进行查询
7.2.3 非面向对象范例
7.3 如何识别反模式
7.4 合理使用反模式
7.5 解决方案:让关系变得简单
7.5.1 反向引用
7.5.2 创建交叉表
7.5.3 设立交通灯
7.5.4 双向查找
7.5.5 合并跑道
7.5.6 创建共用的超级表
第 8 章 多列属性
8.1 目标:存储多值属性
8.2 反模式:创建多个列
8.2.1 查询数据
8.2.2 添加及删除值
8.2.3 确保唯一性
8.2.4 处理不断增长的值集
8.3 如何识别反模式
8.4 合理使用反模式
8.5 解决方案:创建从属表
第 9 章 元数据分裂
9.1 目标:支持可扩展性
9.2 反模式:克隆表与克隆列
9.2.1 不断产生的新表
9.2.2 管理数据完整性
9.2.3 同步数据
9.2.4 确保唯一性
9.2.5 跨表查询
9.2.6 同步元数据
9.2.7 管理引用完整性
9.2.8 标识元数据分裂列
9.3 如何识别反模式
9.4 合理使用反模式
9.5 解决方案:分区及标准化
9.5.1 使用水平分区
9.5.2 使用垂直分区
9.5.3 解决元数据分裂列
第 10 章 取整错误
10.1 目标:使用小数取代整数
10.2 反模式:使用 FLOAT 类型
10.2.1 舍入的必要性
10.2.2 在 SQL 中使用 FLOAT
10.3 如何识别反模式
10.4 合理使用反模式
10.5 解决方案:使用 NUMERIC 类型
第 11 章 每日新花样
11.1 目标:限定列的有效值
11.2 反模式:在列定义上指定可选值
11.2.1 中间的是哪个
11.2.2 添加新口味
11.2.3 老的口味永不消失
11.2.4 可移植性低下
11.3 如何识别反模式
11.4 合理使用反模式
11.5 解决方案:在数据中指定值
11.5.1 查询候选值集合
11.5.2 更新检查表中的值
11.5.3 支持废弃数据
11.5.4 良好的可移植性
第 12 章 幽灵文件
12.1 目标:存储图片或其他多媒体大文件
12.2 反模式:假设你必须使用文件系统
12.2.1 文件不支持 DELETE
12.2.2 文件不支持事务隔离
12.2.3 文件不支持回滚操作
12.2.4 文件不支持数据库备份工具
12.2.5 文件不支持 SQL 的访问权限设置
12.2.6 文件不是 SQL 数据类型
12.3 如何识别反模式
12.4 合理使用反模式
12.5 解决方案:在需要时使用 BLOB 类型
第 13 章 乱用索引
13.1 目标:优化性能
13.2 反模式:无规划地使用索引
13.2.1 无索引
13.2.2 索引过多
13.2.3 索引也无能为力
13.3 如何识别反模式
13.4 合理使用反模式
13.5 解决方案:MENTOR 你的索引
13.5.1 测量
13.5.2 解释
13.5.3 挑选
13.5.4 测试
13.5.5 优化
13.5.6 重建
第 14 章 对未知的恐惧
14.1 目标:辨别悬空值
14.2 反模式:将 NULL 作为普通的值,反之亦然
14.2.1 在表达式中使用 NULL
14.2.2 搜索允许为空的列
14.2.3 在查询参数中使用 NULL
14.2.4 避免上述问题
14.3 如何识别反模式
14.4 合理使用反模式
14.5 解决方案:将 NULL 视为特殊值
14.5.1 在标量表达式中使用 NULL
14.5.2 在布尔表达式中使用 NULL
14.5.3 检索 NULL 值
14.5.4 声明 NOT NULL 的列
14.5.5 动态默认值
第 15 章 模棱两可的分组
15.1 目标:获取每组的最大值
15.2 反模式:引用非分组列
15.2.1 单值规则
15.2.2 我想要的查询
15.3 如何识别反模式
15.4 合理使用反模式
15.5 解决方案:无歧义地使用列
15.5.1 只查询功能依赖的列
15.5.2 使用关联子查询
15.5.3 使用衍生表
15.5.4 使用 JOIN
15.5.5 对额外的列使用聚合函数
15.5.6 连接同组所有值
第 16 章 随机选择
16.1 目标:获取样本记录
16.2 反模式:随机排序
16.3 如何识别反模式
16.4 合理使用反模式
16.5 解决方案:没有具体的顺序……
16.5.1 从 1 到最大值之间随机选择
16.5.2 选择下一个最大值
16.5.3 获取所有的键值,随机选择一个
16.5.4 使用偏移量选择随机行
16.5.5 专有解决方案
第 17 章 可怜人的搜索引擎
17.1 目标:全文搜索
17.2 反模式:模式匹配断言
17.3 如何识别反模式
17.4 合理使用反模式
17.5 解决方案:使用正确的工具
17.5.1 数据库扩展
17.5.2 第三方搜索引擎
第 18 章 意大利面条式查询
18.1 目标:减少 SQL 查询数量
18.2 反模式:使用一步操作解决复杂问题
18.2.1 副作用
18.2.2 那好像还不够⋯⋯
18.3 如何识别反模式
18.4 合理使用反模式
18.5 解决方案:分而治之
18.5.1 一步一个脚印
18.5.2 寻找 UNION 标记
18.5.3 解决老板的问题
18.5.4 使用 SQL 自动生成 SQL
第 19 章 隐式的列
19.1 目标:减少输入
19.2 反模式:捷径会让你迷失方向
19.2.1 破坏代码重构
19.2.2 隐藏的开销
19.2.3 你请求,你获得
19.3 如何识别反模式
19.4 合理使用反模式
19.5 解决方案:明确列出列名
19.5.1 预防错误
19.5.2 你不需要它
19.5.3 无论如何你都需要放弃使用通配符
第 20 章 文明密码
20.1 目标:恢复或重置密码
20.2 反模式:使用明文存储密码
20.2.1 存储密码
20.2.2 验证密码
20.2.3 在 E-mail 中发送密码
20.3 如何识别反模式
20.4 合理使用反模式
20.5 解决方案:先哈希,后存储
20.5.1 理解哈希函数
20.5.2 在 SQL 中使用哈希
20.5.3 给哈希加料
20.5.4 在 SQL 中隐藏密码
20.5.5 重置密码,而非恢复密码
第 21 章 SQL 注入
21.1 目标:编写 SQL 动态查询
21.2 反模式:将未经验证的输入作为代码执行
21.2.1 意外无处不在
21.2.2 对 Web 安全的严重威胁
21.2.3 寻找治愈良方
21.3 如何识别反模式
21.4 合理使用反模式
21.5 解决方案:不信任任何人
21.5.1 过滤输入内容
21.5.2 参数化动态内容
21.5.3 给动态输入的值加引号
21.5.4 将用户与代码隔离
21.5.5 找个可靠的人来帮你审查代码
第 22 章 伪健洁癖
22.1 目标:整理数据
22.2 反模式:填充角落
22.2.1 不按照顺序分配编号
22.2.2 为现有行重新编号
22.2.3 制造数据差异
22.3 如何识别反模式
22.4 合理使用反模式
22.5 解决方案:克服心里障碍
22.5.1 定义行号
22.5.2 使用 GUID
22.5.3 最主要的问题
第 23 章 非礼勿视
23.1 目标:写更少的代码
23.2 反模式:无米之炊
23.2.1 没有诊断的诊断
23.2.2 字里行间
23.3 如何识别反模式
23.4 合理使用反模式
23.5 解决方案:优雅地从错误中恢复
23.5.1 保持节奏
23.5.2 回溯你的脚步
第 24 章 外交豁免权
24.1 目标:采用最佳实践
24.2 反模式:将 SQL 视为二等公民
24.3 如何识别反模式
24.4 合理使用反模式
24.5 解决方案:建立一个质量至上的文化
24.5.1 陈列 A:编写文档
24.5.2 寻找证据:源代码版本控制
24.5.3 举证:测试
24.5.4 例证:同时处理多个分支
第 25 章 魔豆
25.1 目标:简化 MVC 的模型
25.2 反模式:模型仅仅是活动记录
25.2.1 活动记录模式连接程序模型和数据库结构
25.2.2 活动记录模式暴露了 CRUD 系列函数
25.2.3 活动记录模式支持弱域模型
25.2.4 魔豆难以进行单元测试
25.3 如何识别反模式
25.4 合理使用反模式
25.5 解决方案:模型包含活动记录
25.5.1 领会模型的意义
25.5.2 将领域模型应用到实际工作中
25.5.3 测试简单对象
25.5.4 回到地球
附录 A 规范化规则
A.1 关系是什么
A.2 规范化的神话
A.3 什么是规范化
A.3.1 第一范式
A.3.2 第二范式
A.3.3 第三范式
A.3.4 博伊斯—科德范式
A.3.5 第四范式
A.3.6 第五范式
A.3.7 更多的范式
A.4 常识
附录 B 参考书目

下载地址:https://www.wenjiangs.com/wp-content/uploads/2024/02/o2kOZ5gPSYSdO4VW.zip

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

隔纱相望

文章 0 评论 0

昵称有卵用

文章 0 评论 0

梨涡

文章 0 评论 0

蓝咒

文章 0 评论 0

白芷

文章 0 评论 0

樱娆

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文