有几个字段,比如:id name description date
两种存储方式:
方式一、一个表四个字段 每个字段存一个值
方式二、一个表两个字段,第一个字段存ID,第二个字段存数组,存数据的时候,把name description date的值组成一个数组,然后序列化保存。取的时候,再反序列化高手评评这两种方式的优劣,哪个效率比较高。谢谢

解决方案 »

  1.   

    第一个效率高,可直接存储,不需转换。
    第二个可用于,在保存内容不固定,有的有name \有的无name有qestion等,可通过xml格式保存,再通过xml处理
      

  2.   

    看需要,
    方式一是一般的做法,比较适用于name description date 这些字段的查询.
    方式二是特别的做法.优点是,利于对信息的控制. 缺点是如果更新其中任何一个字段要重新构造数组,不利于查询.如果不怕数据冗余,可以两者结合起来.
      

  3.   

    你可以了解一下,phpbb关于m2f的功能,它利用的就是这种方式.
    用起来超爽.所以说,没有最好的方法,只有最合适的方法.
      

  4.   

    web速度的瓶颈是数据库操作。
    如果使用第一种方式,数据条数肯定比第二种多。查询、修改时速度就比较慢。
    第二种,虽然构造数组复杂,但存取的时候,数据量相对较少,速度较快。另一方面,序列化反序列化是在PHP里完成的,把数据库的压力转移到的PHP上。第二种的扩展性还好,如果增加字段,根本不需要修改数据库设计。
      

  5.   

    第一种存固定信息,比如id,name,date..这些东西显然是固定化的
    第二种存额外设置信息,这个是可扩展的,比如存一个json串
    {
      user_father:'他爹的名字',
      user_mother:'他娘的名字'
    }
    如果现在要扩充存储这个用户他姐的名字,只需要在view页面,加多一行表单即可,方便扩展
    <!--原来的表单-->
    <input type='text' name='setting[user_father]' value='爹'/>
    <input type='text' name='setting[user_mother]' value='娘'/>
    <!--扩展的表单-->
    <input type='text' name='setting[user_sister]' value='姐姐'/>后台处理,碰到setting数组的input,就整合成新的json串丢同一个字段里。很多cms都这么用的,扩展很方便。
      

  6.   

    首选"方式一"
    这是错误的,数据条数并没有改变。
    如果加上索引,将极大的提高查询速度这也是错误的,序列化后的字符总量肯定要大于原始数据这个还差不多对于保存序列化数据的字段的查询,只能用 like 方式,效率肯定是要打折扣的
      

  7.   

    呵呵,讨论真激烈。
    其实还有第三种模式,就是直接在业务端配置字段信息,
    就是项目本身整合上一套简易版的phpmyadmin, 可对各模块增添额外配置,表本身可增添字段,设置索引,字段可绑定特定表单(比如text,date,select..),字段对应的多语言变量。。等等一系列设置,简单来说就是把数据库表字段扩展的问题尽量移植到业务端来。
      

  8.   

    第一种更人性化,DB的作用不单是为了存入资料,更是为了方便程序开发,以及之后的维护。所以LZ第二种设计明显不利于之后的维护和延续。
      

  9.   

    怎么存,其实你只要考虑一点 - 日后,name description date这三个字段你有没有需要在数据库中直接对单独一个字段进行各种复杂的查询或操作。如果没有的话,你可以序列化后把它们存一起。如果有需要的话,建议你还是别这么存。现在很多系统有些字段这样存数据,是因为人家的那一串数据根本不需要在数据库里单独做什么操作。鉴于你给出的这三个字段名按照其名来理解其应用的话,还是不要序列化存一起比较好