布尔与标志字段命名
布尔与标志字段统一用 is_ 或 has_ 前缀,取值用 0 和 1 的数值类型,不在同一批表里混用 Y/N、true/false 或「是/否」。字段注释要写清 1 和 0 各代表什么,空值语义单独定义:未知用 NULL,不要用 -1 之类的特殊值冒充布尔取值。
基本信息
| 前缀 | is_ 与 has_ |
|---|---|
| 取值 | 0 或 1(TINYINT) |
| 避免 | Y/N、true/false、是/否混用 |
| 注释 | 写明 1 与 0 的含义 |
| 空值 | 未知用 NULL,不用 -1 代替 |
典型使用场景
- 维表标志位:is_current 标识当前版本行,has_valid_mail 标识联系方式可用
- 明细打标:is_refund、is_internal 用于过滤与统计
- 口径评审:检查是否存在同一含义用不同前缀或不同取值表达的情况
- 下游过滤:写 is_current = 1 而不是直接写字段名,避免空值行为差异
- 数据质量校验:统计布尔字段取值是否只落在 0、1、NULL 三种
布尔字段定义
布尔字段定义
CREATE TABLE dim_customer (
customer_id STRING,
is_current TINYINT COMMENT '1=当前版本 0=历史版本',
has_valid_mail TINYINT COMMENT '1=有有效邮箱 0=无有效邮箱,NULL=未知',
is_internal TINYINT COMMENT '1=内部测试账号 0=外部账号'
);
-- 过滤当前版本时显式比较数值,避免空值参与判断
SELECT customer_id FROM dim_customer WHERE is_current = 1;布尔字段取值约定
| 取值 | 含义 | 说明 |
|---|---|---|
| 1 | 真 / 是 | 业务含义写进注释 |
| 0 | 假 / 否 | 与 1 成对定义 |
| NULL | 未知 | 需明确是否参与统计 |
| 其他 | 非法 | 入仓或质检时拦截 |
注释要写业务含义而不是「是否有效」这类同义重复,例如直接写「1=当前版本 0=历史版本」,评审时一眼就能核对。
空值语义不统一(有的表 NULL 表示未知、有的表 NULL 表示否)会让过滤条件产生系统性偏差,两边统计口径长期对不齐。
布尔字段尽量不要只留一个位:状态类信息(如订单状态、审批结果)取值多于两种时应使用枚举型状态码,再另加若干布尔字段表示常用判断,避免用一个布尔承担全部语义。
质检规则里加一条就够了:布尔字段的取值集合必须为 0、1、NULL 的子集,出现其他值即视为上游变更或转换错误,提前拦截比等到报表出错再排查成本低得多。
标志位字段在报表里常用于过滤,命名与注释的稳定比字段本身更重要;一旦下游接受了某个前缀或取值约定,改动就要按字段下线流程走。