对于大型应用,应“分门别类”。同一类商品具有相同的私有属性集。
但这样做的缺点是表量很大,并需要预先设定属性集。尤其是对新产品,分类和确定属性集都存在一定的难度对于商品种类不是很多的应用(数万种),可用一个字段(text)保存序列化后的私有属性数组
缺点是数据冗余较大。但扩展很灵活,不需要修改数据表结构。检索起来也很方便
比如
serialize(array('出版社' => '清华出版社', '作者' => '老外')) 得 a:2:{s:6:"出版社";s:10:"清华出版社";s:4:"作者";s:4:"老外";}
serialize(array('制造商' => '清华紫光', '容量' => '512M')) 得 a:2:{s:6:"制造商";s:8:"清华紫光";s:4:"容量";s:4:"512M";}你既可以用 select * ... where Attribute like '%清华%' 找出与“清华”相关的全部商品
也可以用 select * ... where Attribute like '%出版社%清华%' 找出“清华出版社”的全部图书

解决方案 »

  1.   

    我的看法 第一种适合产品种类比较固定,后期不会再添加大量新的【商品类别】,不过电子商务小型一般这样也就够了。开发周期短,逻辑简单,处理速度快;第二种适用范围同第一种,区别就是会添加少量新的【商品类别】,并且没有搜索【私有属性】要求的场合,适用于仅供展示特有属性。开发周期短,逻辑简单,处理速度慢第三种扩展性比较好,适用于中型的电子商务网站,但感觉也不是最理想,因为仅对于【私有属性】的搜索带来一定的方便,但是一旦添加大量的商品类别还是会出现【私有属性值表】的快速增长,而且对于检索查询起来也不是很迅速。开发周期段,逻辑复杂,处理速度快第四种其本质就是第一种的重复累加
    适用于硬件条件好的大型网站,开发周期短,逻辑简单,健壮我还有个不成熟的想法相当于第三种和第四种的混合型可以解释为 (2+n)张表2:
    产品分类表 category
    cate_id cate_name attributes
    1 book serialize(array('作者','出版社'))
    2 dvd
    3 digi serialize(array('型号','内存'))产品表 product
    product_id product_name cate_id price postdate hitsn:
    分类私有属性表 
    书籍 book
    product_id 私有属性……DVD dvd 私有属性……数码 digi 私有属性……n的数量取决于category 里面的数据行数,字段数量取决category.attributes的数组长度
      

  2.   

    可能我的提法还是比较传统的那种,逻辑上有些复杂,开发时间也会有些长度,但是感觉比较通用,灵感来自于dedecms的自定义类别
      

  3.   

    xuzuning(唠叨) 的方法貌似很灵活,帮UP了