首页/数据/数仓建模速查/布尔与标志字段命名
分层与规范64 条

布尔与标志字段命名

布尔字段用 is_ / has_ 前缀,取值 0/1 数值型,不使用 Y/N、是/否 混写;含义要在注释里说明 1 与 0 分别代表什么。

数仓建模速查数据更新于 2026-10-13

布尔与标志字段命名

布尔与标志字段统一用 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 的子集,出现其他值即视为上游变更或转换错误,提前拦截比等到报表出错再排查成本低得多。
标志位字段在报表里常用于过滤,命名与注释的稳定比字段本身更重要;一旦下游接受了某个前缀或取值约定,改动就要按字段下线流程走。

易错点

  • 布尔取值混用 Y/N 与 1/0:下游过滤条件写错,统计偏差且不报错
  • 用 -1 或 2 表示未知:布尔语义被破坏,聚合与过滤行为不可预期
  • 过滤条件只写字段名不做数值比较:不同引擎对空值的处理不一致,结果随引擎变化
  • 注释只写「是否有效」:无法判断 1 代表有效还是无效,使用方只能靠猜

数据来源与参考

  • Kimball《数据仓库工具箱(第3版)》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌