第三种方案用于中小型数据库还是可以的。一个公司的产品就算有10000件,每件10个属性,也就是10w条数据,还可以接受。如果要效率更高一些,就要详细考察要求,在Products内设立20个属性字段,全部设定varchar(255),根据不同的产品类型放数据。产品类型另外设定一个表,定义MetaAttributeNamePRODUCTS
ID---NAME---TYPE---P1---P2---P3......P20PRODUCT_TYPES
TYPE---DESCRIPTION---C1---C2---C3......C20这个缺点是无法区分数据类型(全部属性都是Varchar),只有在程序中进行转化。

解决方案 »

  1.   

    谢谢以上各位的讨论!
    昨天仔细想了下,也看认真分析了淘宝这些网站
    采用了类似方案三的方法
    一个用了四张表产品分类表: 产品分类,如:数码相机,手机,MP3等
    属性表:     存放属性,这个表有一个父ID指向产品分类表的ID,就是每一个产品分类下面都可以有多个属性,
    产品表:     存放产品公共属性,如:标题,价格等
    产品属性表: 录入产品的时候先将公共属性存到产品表中,然后得到这个产品的ID,然后再将属性ID,属性值,产品ID存到产品属性表中productClass:id,classNmae
    attribute:id,name
    product:id,name,price
    product_attribute_list:product_id,attribute_id,value这样做基本上没什么问题,扩展起来也比较方便,
    唯一不足的就是产品属性表中的数据量可能会比较大
    路如100个产品,每种产品有100个属性,产品属性表中就有10000条记录了
    其他我也想不到什么好的方法了,欢迎大家继续讨论
      

  2.   

    一些想法:
    1. 先归类, 根据属性的共同性, 将产品划分开来, 每类设计其单独的类别/产品/属性表
       这样设计有一定的理由: 
       a. 不太相似的产品会一齐被处理的机率非常小
       b. 不太可能会做所有的产品
       c. 不同的产品, 其经营手法, 所要做的分析等等, 这些的共通性不大, 而且往往不同类型的东西还是由不同的产品组负责的, 他们的需求会不一样2. 对于归类后的产品, 其属性设计可以分两层:
       a. 常用的, 公用的
       b. 不常用的, 私有的
       第1种放公共属性表, 第2种直接以 xml 数据存储就行了
    通用的/万能的东西个人觉得实在没有必要, 往往省不了开发和维护成本, 也难满足用户需要.