1. 状态展现方式

1.1. 使用数字标识

适用于值域较少、变化较少,可以采用相似的规则语义来表述的状态,通常一个系统中为了达成一致理解,可以做如下规则定义,这样即使没有状态描述,也可以大致推演出该状态含义:

表 1. 行动状态值
状态值 状态说明

0

行动未开始

1

行动进行中

2

行动成功

3

行动失败

4

行动取消

5

行动暂停

9

行动关闭

表 2. 资源状态值
状态值 状态说明

0

资源创建

1

资源提交

2

资源有效

3

资源无效

4

资源撤销

5

资源冻结

9

资源删除

1.2. 使用英文字符串标识

适用于值域较多、变化较多,一般需要配合字典项进行翻译。

1.3. 使用多位存储方式

适用于多维度开关类、经常需要增加维度的场景。

权限定义可以根据位数字符串或者2的mifang

Java操作状态
int i = 1;
int i2 = 2;
#判断第一位的状态是否为1
if((status & i) == i)
#判断
if((status & i2) == i2){
    # 第二位的状态是否为1
}else{
    # 第二位的状态是否为0
}

# 设置第二位为1
status = status | i2;

# 设置第二位为0
status & (~i2)
SQL操作状态
-- 筛选出第一位的状态为1的数据
select * from user where status & b'0001'
select * from user where status & 1
-- 筛选出第一位的状态为0的数据
select * from user where status ^ b'0001'
select * from user where status ^ 1
-- 设置第一位的状态为1
update status = status | b'0001' from user where id = 1
update status = status | 1 from user where id = 1
-- 设置第一位的状态为0
update status = status & ~b'0001' from user where id = 1
update status = status & ~1 from user where id = 1

2. 状态存储方式

2.1. 数据库字段

采用varchar2(N),相比其他类型占用存储更少,且具有同等的性能、扩展性。