zoukankan      html  css  js  c++  java
  • 数据库设计——如何利用一个整数型字段为用户打上63个标

      “标”的作用是为了标示一个用户特性,例如“卖家标”的作用就是标示这个用户是卖家;这种标需求很广,但是这种标有个特性就是只有2种状态:有或者没有,在计算机中就是0或者1;这就好办了,在表中增加整数型字段,整数的每个二进制bit位就可以作为一个标,这样大大节省了空间,例如long型整数就可以为63个标所用(java中long整型有64位)。

    怎么打标:打标就是把标对应字段的某个bit位 置为1;将某个标(tag)定义为一个特定数字,数字为2的n次方,例如1024(2的10次方),要打这个标的话实际进行“或”操作:tag= tag|1024,这样tag字段的第11位就变成了1,对其它bit位没影响。

    怎么去标:去标就是把标对应字段的某个bit位置为0,只要进行的操作为:tag=tag&~1024,这样就把第11位置为0了,对其它bit位没影响。

    怎么读标:读标的操作就是判断标对应的bit位是否为1,判断tag字段是否有1024标(具体这个数字对应哪种状态,记录在数据字典中),tag&1024==1204?有标:没有标。

    PS.如果63个标还不够怎么办?再增加个tag字段呗。由于这种打标方式,简单高效,可封装成接口addTag(String tagColumn ,int tag), removeTag(String tagColumn ,int tag)。

  • 相关阅读:
    莫队模板
    CF600E Lomsat gelral
    JZOJ 捕老鼠
    JZOJ 4896. 【NOIP2016提高A组集训第16场11.15】兔子
    JZOJ 4895【NOIP2016提高A组集训第16场11.15】三部曲
    双端队列xLIS问题
    最大K段和
    你真的了解ES6的promise吗?
    JS对象和数组深浅拷贝总结②
    当前页码删除唯一数据后加载前一页内容
  • 原文地址:https://www.cnblogs.com/xujanus/p/3627939.html
Copyright © 2011-2022 走看看