SQL反模式(五)

欢迎参考 SQL反模式(前言)的数据库设计

此文章只是给自己做一个小抄,如有冒犯,还忘见谅


1. 对未知的恐惧

目标: 辨别悬空值

SQL反模式(五)


反模式: 将 NULL 作为普通的值,反之亦然

Mysql的空值与NULL的区别


解决方案: 将 NULL 视为特俗值

1. 在标量表达式中使用 NULL

SQL反模式(五)

2. 在布尔表达式中使用 NULL

SQL反模式(五)

3. 检索 NULL 值

SQL反模式(五)

4. 声明 NOT NULL 的列

SQL反模式(五)
SQL反模式(五)

5. 动态默认值

SQL反模式(五)

2. 模棱两可的分组

背景

SQL反模式(五)


目标: 获取每组的最大值


反模式: 引用非分组列

1. 单值规则

SQL反模式(五)
SQL反模式(五)

2. 我想要的查询

SQL反模式(五)


识别反模式

SQL反模式(五)


解决方案: 无歧义的使用列

1. 只查询功能依赖的列

SQL反模式(五)

2. 使用关联子查询

SQL反模式(五)

3. 使用衍生表

SQL反模式(五)
SQL反模式(五)
SQL反模式(五)

4. 使用 JOIN

SQL反模式(五)
SQL反模式(五)

5. 对额外的列使用聚合函数

SQL反模式(五)

6. 连接同组所有值

SQL反模式(五)
SQL反模式(五)

3. 随机选择

背景

SQL反模式(五)


目标: 获取样本记录

SQL反模式(五)
SQL反模式(五)


反模式: 随机排序
SQL反模式(五)
SQL反模式(五)


识别反模式
SQL反模式(五)


解决方案: 没有具体的顺序

1. 从 1 到最大值之间随机选择

这是一种避免所有数据进行排序的方法,就是在 1 到最大值之间随机选择一个。
SQL反模式(五)

2. 选择下一个最大值

SQL反模式(五)

3. 获取所有的键值,随机选择一个

SQL反模式(五)
SQL反模式(五)

4. 使用偏移量选择随机行

SQL反模式(五)

5. 专有解决方案

SQL反模式(五)