一、上下架字段
很多产品都有上下架的需求,比如商品管理,广告管理,图书管理等等。
一般我们都用一个状态字段来表示他的状态来,不同的状态下我们可以进行不同的业务操作。但有时候真实的状态又与时间有关。某时间到了就上架,某时间到了就要下架。如果我们只用一个状态字段来表示状态,那么我们就需设计一个定时任务,每隔很短的时间来判断当前时间与设置时间的关系来变化状态值。这样状态值就可以用多个值来表示直正的状态。比如:待上架,已上架,已过期。
如果不用定时任务呢?那我们就要在使用时加上时间的判断,这样的话,状态值可以就是两个:下架、上架。至于上架又可分成"时间内"与"时间外"的,这个不在状态字段里体现。下图分别表示只有开始时间与有开始时间和结束时间的两种情况:
以前的另一种状态设计,感觉比较麻烦:
二、is_del(逻辑删除)字段
这个用于恢复一些误操作,但不滥用。因为如果滥用(如每个表都设置一个),那么所有的查询sql都要关注这个字段,谁又敢保证“都”都关注到字段呢。
如果确实有这样的业务,那么在“逻辑删"时就要考虑相关表的数据。是要物理删除?逻辑删?不变化? 不变化的话,相关表的数据会不会被别的表关联到?
关联到了数据是不是就是逻辑错误?
如果is_del能放进state字段,就不要拿出来,放进去就要考虑有没有删除状态下还有别的状态(比如有需求要取删除的但曾经是显示的),有就不能放进去。
三、冗余字段的设计
数据库的设计范式里是不推荐冗余字段的,确实有它的道理。在实际操作中,有时为了效率要多设计一个冗余字段,那么一定要考虑到,如果同步它的更新。是用事务,还是定时任务?