主页 > oracle, 数据库 > 一个字段包含多个类型该如何设计【原创】

一个字段包含多个类型该如何设计【原创】

2013年5月15日 发表评论 查看评论

今天肚腩群里,有个兄弟问,一个表数据如下:

name    apptype  
A       1,3,4
B       2, 3
C       1, 4

查询apptype包含3的name不用LIKE该如何做?

肚腩问其为何不用LIKE,日:LIKE会全表,性能不行。

这样的表设计存在如下问题:

1. 如果APPTYPE增加到11,那么用like会将1类型也选上,所以那兄弟说用了 concat在前后加上逗号,再LIKE数值和逗号。这样字段数据都变了,怎么建索引也没用了

2. 如果以后增加类型或者减少类型,操作会很麻烦

3. 如那个兄弟所说,这样做性能太低。
。。。

肚腩想起貌似以前也见开发这样干过,比如一个用户买了几款产品。

肚腩推荐一种方法:

使用数值 0  1   2  4  这些代表类型。如果是多种类型,则相加。
类似于LINUX的权限设计,这样不但用得上索引,而且查多种类型组合也很快,加法是很快的,不用去LIKE OR 什么的了。
并且节省了空间,因为就一个值。还能使用索引。修改的时候也快。

原创文章,转载请注明: 转载自肚腩照明月'blog

本文链接地址: 一个字段包含多个类型该如何设计【原创】

文章的脚注信息由WordPress的wp-posturl插件自动生成


  1. 2013年5月25日12:31 | #1

    如果是这样设计的话,我查类型包含2的记录,应如何写sql呢?

  2. toniz-think
    2013年5月27日16:58 | #2

    查 2,3,6,7
    这些都是值,比之前的字符串设计要有效率。

    举个4位编码例子
    0 是 0000
    1 是 0001
    2 是 0010
    4 是 0100
    8 是 1000

    查2就是:
    2 0010
    3 0011
    6 0110
    7 0111
    这几个第二位是1的。这个可以写个函数来获取。

SEO Powered by Platinum SEO from Techblissonline