Boolean Lookup Tables设计:选用Bool列还是简易查找表?
合同副本申请表设计方案选型参考
两种方案没有绝对的对错,完全适配不同业务场景匹配业务需求,通用选型逻辑如下:
选择第二种方案(全量存储用户申请状态)的实际必要性
- 简化高频查询逻辑,降低性能损耗
如果业务存在高频查询「哪些用户未提交申请」的需求,第一种方案需要左连接全量用户表判断profile_id是否为空,用户量级较大时左连接性能远低于直接查询单表has_requested_copy = false的语句,且查询写法更冗余,容易出现统计误差。 - 支持低概率的状态变更回溯
你提到状态几乎不会切换,但不代表完全不会发生,比如用户提交申请后申请作废、重复申请等场景,第二种方案只需更新has_requested_copy字段值,通过updated_date即可追踪变更记录;第一种方案则需要删除原有记录或额外新增作废标记字段,反而会提升复杂度。 - 降低后续业务扩展成本
如果后续需要新增申请相关属性,比如申请审核状态、申请副本份数、领取状态等,第二种方案可以直接新增字段适配;第一种方案要为未提交用户新增关联属性时,重构表结构、回填历史数据的成本极高。 - 降低统计类需求实现成本
涉及整体申请覆盖率、多维度申请统计的需求,第二种方案直接单表聚合即可完成,无需每次关联全量用户表,避免统计逻辑出错概率更低。
第一种方案的适用场景
如果你的业务完全不存在查询未提交用户的需求,也确定可预见的未来不会新增申请相关的扩展属性,也没有全量申请统计的需求,第一种方案完全合理,更轻量无冗余,写入成本更低,不需要回填初始的false值。
内容的提问来源于stack exchange,提问作者VSO
相关产品推荐
相关产品推荐

