问题中的‘已评论’由‘评论’行为产生,而‘评论’这个action并不是订单业务实体的核心业务流程,且可能存在多个前向依赖action(支付、发货、收货等),所以应当独立到一个字段标识。
问题中的‘已退货’由‘退货’行为产生,而‘退货’这个action是订单业务实体的核心业务流程,用户非常关心,且只单向依赖于‘收货’action,所以应当记录到订单业务实体表的‘订单状态’字段中。
问题中的‘已退款’由‘退款’行为产生,而‘退款’这个action是订单业务实体的核心业务流程,用户非常关心,但是这个action存在多个前向依赖action(支付、发货、收货等),所以应当独立到一个字段标识。
2、订单表的‘订单状态’字段对应的字典值如何表示?可选项有:使用数字标识、使用多‘位’存储方式标识、使用具有明确业务含义的英文字符串标识;
i、字典值域较多、变化较多、报表等业务场景会使用到的业务实体表的业务状态字段,使用‘方案d:新建字典表’的方案处理;如‘订单业务实体表’中的‘订单状态’字段。
j、字典值域较少、变化较少、报表等业务场景不会使用到的业务实体表的业务状态字段,使用‘方案a:使用数字标识字典’的方案处理;如‘支付宝的支付流水表’的‘支付流水状态’字段。
k、系统日志/跑批记录表的状态字段,使用‘方案a:使用数字标识字典’的方案处理;如‘待收货记录表’的‘跑批状态’字段。
3、订单表的‘订单状态’字段使用何种类型?可选项有:number(N)、char(N)、varchar2(N);
varchar2(N)占用存储更少,且具有同等的性能、扩展性,选择varchar2(N)作为数据库‘状态’字段的类型。
参考资料数据库表设计(状态字段)
[原创]在Oracle 10g,Number、Char和Varchar2类型作为主键,查询效率分析