zoukankan      html  css  js  c++  java
  • 利用二进制存储多种状态

    背景

    目前一个订单需要加一个异常的状态,但是一个订单可能存在多种状态,又要满足平常的分页查询;例如,目前的异常状态有:断货、断码、库存异常、超期。一个订单可能存在多种转态。

    解决思路

    • 新建表:按照我们常规的思路,不就是一对多的关系吗,直接新建一张表就好了,用表进行关联,两种场景都可以满足。 这也是我们平常经常使用的。
    • 利用二进制特性: 在原表中加入一个字段,用于存储订单状态的异常类型(exception_type); 按照平时的思路,这个类型一般是枚举值,那么我们可以这样定义:
        /**
         * 异常类型  1.断货 2.断码 3.库存异常  4.超期
         */
        NORMAL(0, "正常"),
        OUT_STOCK(2, "断货"),
        BROKEN_CODE(4, "断码"),
        STOCK_EXCEPTION(8, "库存异常"),
        OVER_DATE(16, "超期"),

      那如果存在多种状态怎么表示呢? 比如一个订单是断货,又是断码,那么我们数据库存的就是6 。同理可得,如果存的是14,那这个单是断码、断货和库存异常。

    其实我们可以发现,2|4=6,2|4|8=12,也可以看成 2+4=6,2+4+8=12. 那么在数据库里,我们可以根据  2&6 =2, 4&6=4 的特性去查询。 对应的sql语句为:

    select *  from   table   as t   where #{exceptionType}=#{exceptionType}&t.exception_type and exception_type !=0;

    对于存储在ES上,我没有找到ES上的与操作,可以用回溯算法将值解析,用数组的方式存储,然后查询。

                              

  • 相关阅读:
    # 牛客挑战赛46_C题排列(前缀优化DP)
    # 牛客挑战赛46 B最小的指数
    Educational Codeforces Round 99 (Rated for Div. 2)
    Wireless Password HDU
    Codeforces Round #686 (Div. 3)
    网络流之最小费最大流
    网络流之最大流
    next()和nextLine()的区别
    初识HTML
    jQuery笔记
  • 原文地址:https://www.cnblogs.com/xiaofeng-fu/p/14920023.html
Copyright © 2011-2022 走看看