用户在运行时添加自定义字段是一个很常用的功能。通常一个字段对应数据库表的一列。
我们老的做法是在表中预留100个不含特定意义字段。这个方法有如下缺点:
1,限制了自定义字段的数量,只能有100个。
2,一个自定义字段同往往只为部分用户所用,用不上这个字段的用户的记录,只能把相应的列空着。这样导致了表中预留列利用不充分。本来100个预留列完全够用,被几个用户一分,就不够用。不知各位高手有什么高招?

解决方案 »

  1.   

    >用户在运行时添加自定义字段是一个很常用的功能。
    反对,如果表定义合理,用户的天价不一定要影射到添加DB中表的字段上。
      

  2.   

    alter table yourtable add yourcolname varchar2(9);
    然后你的select都是select *
    或者你建一个自定义专用表
    id河泥元表主见连
    typedef像但于添加的烈的名字
    data具体数据了,最好都强制转成string
    你用的时候也可以select
    统计的时候列传行,这里例子多多。
      

  3.   

    如果你门的用户经常会添加字段的话 表明你的表设计不合理你可以把你现在的纵表写成横表那样就不管用户要增加多少个属性都可以满足比如:
    用户某是记录产品信息的录入员现在的产品信息有20个属性,
    一般纵表就会定义20个属性列来存放这些数据,如果增加10个属性就增加10个列,一次类推,
    这样做发的缺点有2个,楼主也已经说了.
    横表解决办法:
      表(TABLE1)一般只有5个栏位
      COLUMN1:产品别
      COLUMN2:栏位类型
      COLUMN3:栏位描述
      COLUMN4:栏位值
      COLUMN5:备注
      当然这是最简单的举例.
      这样你在定义一个栏位类型基础表(TABLE2)就可以了
      如上述情况 则如果20个属性都有值那么这个表(TABLE1)就有20条纪录
      如果20个属性8个有值就只有8条纪录
      增加10个属性值的时候你只要在栏位类型基础表中定义(TABLE2)下新增加的栏位类型,
      如果新增加的的10个属性值都是输入数据那么就增加(TABLE1)10条纪录
      这样做发的优点是可以不管用户需要新增多少个输入项目,
      缺点也现而易见:1.增加数据量 ;2.增加编码难度  说的不是很明白,希望能大概理解我的意思PS:我以前的公司是一家制造型企业,我们自己开发的ERP中就是用横表的方法解决用户经常增加输入判断项目的需求的. 
      

  4.   

    to :skyswan(施望):
    性能太差,无法进行大数据量处理不知道是你的想像还是你的实际经验,
    我的个人经验是在千万级数据的时候用户在输入和查询数据的时候速度没有影响性能差一般是由于表结构定义不好,主键索引未建立,SQL语句没有优化所引起而SQL速度慢的情况都是由于SQL语句的写法有问题造成的,我以前的一部分工作也是帮手下的人优化SQL语句,只要SQL语句得当横表对数据的查询和新增影响很小.大数据量计算和其他表的速度没有很大差别纵表的栏位数量是有限制的255个,对于经常有栏位新增的表来说是及不合适的
      

  5.   

    to baojianjun(包子) 
    我的数据量要求是这样:主表200万级,自定义字段每类用户100个,纵表极限数据量将达到2亿。可以分流一部分自定义字段横表中,但也不能低于50个,极限数据量仍有1亿。不过我可以基于千万级数据进行分析,如果并发效果较好的话,也可以考虑。