我有一个州历史表,其中包含活动的状态。这些状态可能是重复的。样本表:
id activity_name state sub_state
1 firstTask Check INPROGRESS
2 firstTask Check FAIL
3 secondTask Check INPROGRESS
4 secondTask Check SUCCESS
5 seccondTask Initiated INPROGRESS
6 secondTask Initiated SUCCESS
任何具有新状态的新活动都可以随时在系统中引入。
表中的这些状态用于调试目的。现在,我需要公开一个读取此表的API,并将这些状态转换为有意义的状态,忽略重复。
例如,上表应公开为
First TASK:
CHECKED --> FAILED
Second Task:
CHECKED --> INITIATED
我应该采用哪种方法/设计模式来处理新引入的状态,压缩和转换为有意义的状态。
提前致谢。
答案 0 :(得分:0)
如果你没有这样的查询:给我所有任务哪个状态检查并且子状态失败尝试这种方法。将状态和子状态保存在数据库中的json字符串中。
id activity_name state
1 firstTask {'Check' : ['INPROGRESS', 'FAIL']}
2 secondTask {'Check' : ['INPROGRESS', 'SUCCESS'], {'Initiate' : ['INPROGRESS', 'SUCCESS']}
如果你喜欢这种理性的方式,那就试着像那样保存它,或者上面的标准不合适。
id activity_name state sub_state
1 firstTask Check 01-INPROGRESS
2 firstTask Check 02-FAIL
3 secondTask Check 01-INPROGRESS
4 secondTask Check 02-SUCCESS
5 seccondTask Initiate 01-INPROGRESS
6 secondTask Initiate 02-SUCCESS
所以你可以拥有像
这样的SQL查询SELECT MAX(SUB_STATE) FROM STATES WHERE activity_name = 'firstTask' and state = 'Check';
Max在这里是一个字符串比较,所以如果你有一个状态超过99个sub_states,那么使用003-SUCCESS等。你也可以使用普通的int数字,但是如果没有进一步的知识,你可以使用普通的int数字。 sql控制台。因此,如果数据大小无关紧要,我宁愿附加有意义的字符串。
在这两种方法中,您都可以轻松引入新状态。