设计布尔(Boolean)字段看似简单,但其实有很多细节和“坑”需要注意。下面从数据库设计、代码建模、API 设计、业务语义几个层面系统讲一下。
不同数据库布尔类型不同:
TINYINT(1)(0 / 1)BOOLEANBIT✅ 建议:
is_deleted BOOLEAN NOT NULL DEFAULT FALSE
尽量不用 NULL,除非业务真的“未知”。
❌ 不推荐:
is_active BOOLEAN
✅ 推荐:
is_active BOOLEAN NOT NULL DEFAULT TRUE
原因:
is_ / has_ / can_ 前缀布尔字段要“读起来像判断句”。
✅ 好命名:
is_deletedhas_paidcan_editenabled❌ 差命名:
deletestatus(这是状态,不是布尔)flag用户有很多开关:
is_email_enabled
is_sms_enabled
is_push_enabled
is_admin
is_vip
→ 字段越来越多,表越来越宽
user_status ENUM('normal','vip','banned')
permissions INT -- 位运算
或
user_setting (
user_id,
setting_key,
setting_value
)
private boolean deleted;
⚠️ 注意:
Boolean 除非允许 nullisDeleted()interface User {
isDeleted: boolean;
}
is_active: bool = True
{
"isVip": true,
"canEdit": false
}
❌ 避免:
"status": 1
❌ 用 0/1 字符串
status = '0'
❌ 用布尔表示多状态
is_error -- 其实有 10 种错误
❌ 布尔字段语义模糊
is_done
(done 是什么?支付?发货?)
| 场景 | 建议 |
|---|---|
| 多状态 | 用枚举 |
| 可扩展配置 | 用配置表 |
| 历史记录 | 用时间戳 |
| 权限系统 | 用位 / 关系表 |
is_deleted BOOLEAN NOT NULL DEFAULT FALSE
created_at TIMESTAMP NOT NULL
deleted_at TIMESTAMP NULL
✅ 逻辑删除优于物理删除
如果你愿意,可以告诉我:
我可以直接帮你设计具体字段表。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。