欢迎参考 SQL反模式(前言)的数据库设计
此文章只是给自己做一个小抄,如有冒犯,还忘见谅
1. 对未知的恐惧
目标: 辨别悬空值
反模式: 将 NULL 作为普通的值,反之亦然
解决方案: 将 NULL 视为特俗值
1. 在标量表达式中使用 NULL
2. 在布尔表达式中使用 NULL
3. 检索 NULL 值
4. 声明 NOT NULL 的列
5. 动态默认值
2. 模棱两可的分组
背景
目标: 获取每组的最大值
反模式: 引用非分组列
1. 单值规则
2. 我想要的查询
识别反模式
解决方案: 无歧义的使用列
1. 只查询功能依赖的列
2. 使用关联子查询
3. 使用衍生表
4. 使用 JOIN
5. 对额外的列使用聚合函数
6. 连接同组所有值
3. 随机选择
背景
目标: 获取样本记录
反模式: 随机排序
识别反模式
解决方案: 没有具体的顺序
1. 从 1 到最大值之间随机选择
这是一种避免所有数据进行排序的方法,就是在 1 到最大值之间随机选择一个。2. 选择下一个最大值
3. 获取所有的键值,随机选择一个
4. 使用偏移量选择随机行
5. 专有解决方案