举个例子, 现在商场有电视机, 洗衣粉,电脑等商品出售.
电视机的属性有: 屏幕尺寸, 产地, 类型(如液晶,等离子,传统等), 品牌, 型号, 售价...
洗衣粉的属性有: 品牌, 包装(桶装,袋装等), 重量, 产地, 售价...
电脑的属性有:   品牌, 型号, CPU, 内存, 显示器类型, 售价...象这样类型的产品可能很多很多, 有些属性可以通用(如售价), 有些就各自不同了.而且一个商场, 象这样的商品很多很多, 而且随时有可能增加新商品, 可能又有未预料的属性.我想问问这种情况大家如何处理的?
如果设每个商品一个表, 那如果增加每增加一个新商品岂不就要加一次表?(包括主从表似乎也一样)
如果设一个总表, 似乎就更不行了?

解决方案 »

  1.   

    應該在同一個表, 加一個或多個字段來區分才對!>>电脑的属性有:   品牌, 型号, CPU, 内存, 显示器类型, 售价...
    這個有個組合的概念, 一些普通的 進銷存 軟件中, 都會處理這個, 看看別人是怎麼做的
      

  2.   

    伟大兄可以详细说说吗?
    这样可以吗?
    主表:
    ProductID  ProductType
      000001     电视机
      000002     洗衣粉
      000003     电脑
      ............电视机从表:
    TypeID  ScreenSize  ProdArea  ScreenType  Brand  Model  Price
    000001      29       QingDao      LCD      Hair  H1080  10000
      

  3.   

    to aiirii
    组合是怎么实现呢? 能说说吗?
    是不是用什么分隔符分割各属性呢?这样的话用SQL语句查找起来方便吗?
      

  4.   

    用同一个属性值表,预设尽可能多的字段,每个字段设为sql_variant类型示例
    下例假定 tableA 包含 colB 和属于 sql_variant 类型的 colA,检索有关值为 46279.1 的 colA(其中 colB =1689)的 SQL_VARIANT_PROPERTY 信息。CREATE   TABLE tableA(colA sql_variant, colB int)
    INSERT INTO tableA values ( cast (46279.1 as decimal(8,2)), 1689)
    SELECT   SQL_VARIANT_PROPERTY(colA,'BaseType'),
             SQL_VARIANT_PROPERTY(colA,'Precision'),
             SQL_VARIANT_PROPERTY(colA,'Scale')
    FROM      tableA
    WHERE      colB = 1689
      

  5.   

    那么比如A类商品有20个属性, B类商品有5个属性, 商品B类的数量很多(也就是说很多种商品属于B类商品), 那么对于B而言,岂不是冗余很多?
    另外,对于象paradox这种数据库,是不是没有variant类型呢?
      

  6.   

    这么多商品,买家最关心是什么?
    无非是价钱。当然还有其他信息,不过都是千变万化的。放一个TEXT字段,把产品信息写进去就可以了。把产品归类,例如电视机属于家电,电冰箱也是家电,每个牌子都对应唯一的ID。
      

  7.   

    还是把商品分大类后放在一个表中比较好些。电视机的属性有: 屏幕尺寸, 产地, 类型(如液晶,等离子,传统等), 品牌, 型号, 售价...
    洗衣粉的属性有: 品牌, 包装(桶装,袋装等), 重量, 产地, 售价...
    电脑的属性有:   品牌, 型号, CPU, 内存, 显示器类型, 售价...好多属性可以放在一起,比如:电脑属性没有必要列的太详细,把一些无关信息放在一个MEMO就行了。
      

  8.   

    昨天晚上为这个问题考虑了很久,能想到的有两种做法:1。3个表, 
    一个表记录树结构:(-1代表无父节点)
      Parent_id  self_id
    ------------
        -1          0  (即根)
        0           1
        0           2   
        1           3
        2           4(假设表电视机)
        2           5(假设表电脑)
        .............另一个作为主表,预留足够的列数来记录所有商品属性
    id(表1中id的fk)   型号   品牌   售价   产地   field1     fild2     field3 .......fieldN
    ----------------------------------------------------------------------------------------
       4              2909   海尔   10000  青岛     等离子    true    2005.1    
       5              510-M  DELL   5000   美国    赛扬2.4G  15'液晶    256M
      ..................最后一个表用来记录表2中的属性对应的含义和中文称呼(对应含义即该字段实际字段名)
    id(同上)   字段名      含义         中文称呼
    -----------------------------------------------
      4        field1     TV_Type       屏幕类型
      4        field2     P_i_P       是否带画中画
      ....
      5        field1     CPU_Type       CPU类型
      5        filed2     Moni_Type      显示屏类型
      ....
     
      

  9.   

    另外一个想法就是交叉表
    1。表1,同上帖
    2。表2:
       id(fk) 属性名   属性值
      -------------
         4     型号     2909
         4     品牌     海尔
         4     售价     10000
        ..........
         5     品牌     DELL
         5     CPU类型  赛扬2.4G
        ..........