有很多字段数量不一的表怎么处理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
refresh

有很多字段数量不一的表怎么处理

  •  
  •   refresh 2015 年 4 月 26 日 3255 次点击
    这是一个创建于 4015 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一个产品有很多型号,但不同产品型号是不一样的,但希望型号可查可分组。目前的想法是为每个产品都建一个表,新增加一个产品就建一个表。

    现在问题:

    1. 这样一个产品一个表好吗,有没有其它好办法
    2. 与产品表等其它表同在一个库好还是分库好,分库感觉不好查询,比如说要连接查询不太好;如果在同一个库,这个库的表会非常多。


    求建议,太高大上的解决方案就不要了,小项目。
    第 1 条附言    2015 年 4 月 26 日
    说明一下,数据库是mysql,每个产品会有不同数量的字段,每个字段的数据类型也可能不一样。其实有点类似于淘宝的商品库,每个商品有不同的属性,但要示属性可查可分组
    如果为每个产品都建表的话,那么表可能会非常多,达到1000+
    如果放到一个表里的话,那么查询分组的问题比较难解决

    换数据库的建议就不要了,因为不可能。
    第 2 条附言    2015 年 4 月 27 日
    业务大概是这样的:
    产品表,这个很稳定,没有问题
    型号表,一个产品每有很多型号,每个产品的型号字段也不一样,类似于产品属性。一个产品会有从数百到上万的型号,所有产品加起来,估计会上百万的型号。
    现在要求型号可以like查询可以分组,可以按数值区间查询,所以还需要做索引,要不查询效率没法看。

    另想问一下,一个库里有一千张表,会不会影响效率,会带来什么坑
    16 条回复    2015-04-27 18:47:07 +08:00
    hinate
        1
    hinate  
       2015 年 4 月 26 日   1
    我认为可以一个表 类似 省市县 这样的
    refresh
        2
    refresh  
    OP
       2015 年 4 月 26 日
    @hinate 和省市县有什么关系?
    refresh
        3
    refresh  
    OP
       2015 年 4 月 26 日
    没说清楚,每个产品的字段数量是不一样的
    zado
        4
    zado  
       2015 年 4 月 26 日   1
    做一个表就可以了,把所有可能用到的字段都加上去.然后再增加一个字段,用于标记这个产品的可用字段.
    maikcn
        5
    maikcn  
       2015 年 4 月 26 日   1
    pgsql,型号之间通用的就用字段区分出来,特有的属性保存成json格式
    refresh
        6
    refresh  
    OP
       2015 年 4 月 26 日
    @zado 如何查询分组,你的意思是做一个最大字段的表么,这种方式考虑过,但觉得好像不太好,字段类型不一样,有些需要建索引有些不需要。


    @maikcn 现在只考虑mysql,pgsql这样可查询么
    Comdex
        7
    Comdex  
       2015 年 4 月 26 日
    mongodb?
    zado
        8
    zado  
       2015 年 4 月 26 日
    可以再添加一个字段记录分组信息.

    我的意思是做一个很多字段的表,字段类型不一样当然就要分开建字段了,每个产品都选择性的填写自己需要的字段,不需要的就留空.

    产品数量有多少啊?不多就不用建索引,就算必须建索引,一个表也是可以建立多个索引的啊.
    refresh
        9
    refresh  
    OP
       2015 年 4 月 26 日
    @zado 你这个也是一种解决方案,但我觉得业务逻辑将会非常复杂,索引也不好建。比如说总共有5种数据类型,然后每种类型建20个字段,再用一个表标记,万一哪天某个产品属性突然多了,就麻烦了。

    数量量比较大,估计有上百万条记录
    yangqi
        10
    yangqi  
       2015 年 4 月 27 日   2
    参考wordpress的方法,id-属性-值,表里只要这三个字段,这样每个商品可以有任意无限个属性

    这种方法比较灵活,但是牺牲一点性能,可以在别的地方优化
    maikcn
        11
    maikcn  
       2015 年 4 月 27 日   1
    @refresh pgsql 的 json 格式内的内容是支持直接查询的,不过不考虑换数据库的话 mysql 要到 5.7 的版本才原生支持 json,或者 #10 楼的也是一个办法
    FrankFang128
        12
    FrankFang128  
       2015 年 4 月 27 日 via Android   1
    类型不同的数据怎么能在一个表里
    zado
        13
    zado  
       2015 年 4 月 27 日   1
    @refresh 没有想到产品信息表会有这么大,这样设计是效率很低的.
    wy315700
        14
    wy315700  
       2015 年 4 月 27 日   1
    mongodb
    hdshen
        15
    hdshen  
       2015 年 4 月 27 日   1
    如果只用mysql 可以把每个产品 必有的 通用的字段 设计成一个表

    表里 额外计算添加一个分组或者 对应的详细 分表

    详细分表可以创建多个 按照类型算吧 id 属性 值

    缺点是对属性的查询性能可能不够理想


    其实mongodb是最好的解决方案
    refresh
        16
    refresh  
    OP
       2015 年 4 月 27 日
    @yangqi 小量数据的话,wordpress的方式没有问题,但如果上百万的数据,wp的方式不行

    @maikcn 现在转数据库不可能了

    @hdshen mongodb在这方面是适合,但业务系统估计比较麻烦,坑也比较多。一个表业务处理会比较复杂,多个表的话,会有很多表,想想一个库里有1000+的表好蛋疼
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3866 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 57ms UTC 04:20 PVG 12:20 LAX 21:20 JFK 00:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86