做一个类似国美(http://www.gome.com.cn)的项目
问题:产品分类无限级,不同类产品的参数有区别.数据库如何设计才合理...
现在我的做法是.
将参数(字段)跟参数的值分开两个表.
然后将
分类-->产品       建立关联1:M
分类-->参数(字段) 建立关联1:M
产品-->参数的值   建立关联1:M
参数(字段)-->参数的值   建立关联1:M
这样设计是否合理.是否有更好的方法

解决方案 »

  1.   

    1.产品类别表:类别ID,类别名称 等具有共性的表
    2.产品类别明细表:类别ID,参数名称,参数值
    3.产品类别关系表:ID,父类别ID,子类别ID
      

  2.   

    这个显然是递归
    CID        PCID      ClassName
    编号(pk)  上级编号    分类名称
      

  3.   

    现在的主要问题不是无限级分类,而是不同分类之间产品的参数不同..这才是问题的重点楼主:你详细的看看我在3楼的回复,1.产品类别表:类别ID,类别名称 等具有共性的表 
    2.产品类别明细表:类别ID,参数名称,参数值 
    3.产品类别关系表:ID,父类别ID,子类别ID
    表二不是很容易解决参数不同的问题吗?
    例如:类别ID,参数名称,参数值 
    洗衣机   容量      4升
    电视机   尺寸      14寸
      

  4.   

    类别ID,参数名称 参数类型 参数值 参数单位  
    洗衣机   容量       int      4       升
    电视机   尺寸       int     14      寸 
    电视机   预选台数   int     14      个
    电视机   传输方式   char    xxxxx   null
    如果考虑实现的方便  可以把参数类型 编号
      

  5.   

    电视机   预选台数   int     14      个 
    电视机   传输方式   char    xxxxx   null 同一个字段有两种类型,另外这种方法会造成大量数据冗余我的想法是
    参数(字段)表
      类型ID             参数名称           参数(字段)ID(自动增量)       单位
    电视机类型ID           尺寸                      1                   寸
    电视机类型ID          屏幕类型                   2                   -
    洗衣机类型ID           容量                      3                   升
    洗衣机类型ID          洗衣方式                   4                   -参数表:
    产品ID       参数(字段)ID      参数值(描述)         参数值(数字)
    电视机ID          1                -                  17
    电视机ID          2               液晶                 -  
      

  6.   

    sortID     sortName   parentID
    ---------------------------------
    1          A          0
    2          B          2
    3          C          2
    4          D          3
    5          E          3
    6          F          1
    7          G          2
    8          H          3
    9          I          1
    10         J          4
    11         K          4
    12         L          2
    你认为可不可以是无限级?
      

  7.   

    我没有说清楚:
    1 电视机,洗衣机,自然是使用ID的
    2 电视机   预选台数   int     14      个  
      电视机   传输方式   char    xxxxx   null    同一个字段有两种类型, 
      你看错了,列[参数类型]的数据类型是char, 【同一个字段有两种类型】,下边都是数据  (int,char)都是数据。
    3 你的解决方案和我的解决方案都是两个字段,你是把不同的类型的值放在不同的列。我是把值的类型保存下来,我能够处理很多的类型。你只能处理一种类型建立一个列
       还有 处理业务逻辑时  不同的类型我的处理逻辑是一致的
      

  8.   

    @songhuan 
    你的方法应该会造成大量的数据冗余..例如,有10000台电视机产品,那么参数表里面的就必须出来  N个参数*10000而且参数值(即可以为任意类型,这里应该为navchar),这样无法对某一个参数在sql查询的时候进行排序...不过.处理业务逻辑时  不同的类型我的处理逻辑是一致..应该是可取的..谢谢..明天结贴吧..
      

  9.   

    tb_class
    id,pid,name,other fieldstb_goods
    id,class_id,name,other fieldstb_attributes
    id,goods_id,name,value如:电子电器 下有 电器 下有 家电 下有 电视机 下有 长虹Axxx ,它有 重量,尺寸,价格 三个属性.
    书 下有 电子书 下有 科技类 下有 电脑类 下有 编程类 下有 web开发类 下有 asp.net技术内幕,它有 页数,纸张,价格,出版社,作者 五个属性
    (以上只是举例,说明级别及具体商品属性不同)则数据为:
    tb_class
    id pid name
    1 0 电子电器
    2 1 电器
    3 2 家电
    4 3 电视机
    5 0 书
    6 5 电子书
    7 6 科技类
    8 7 电脑类
    9 8 编程类
    10 9 web开发类tb_goods
    id class_id name
    1 4 长虹Axxx
    2 10 asp.net技术内幕tb_attributes
    id goods_id name value
    1 1 重量 20KG
    2 1 尺寸 25'
    3 1 价格 980
    4 2 页数 560
    5 2 纸张 16开
    6 2 价格 98
    7 2 出版社 xx出版社
    8 2 作者 不知道
    这种设计是最灵活的设计.
    但是任何做法都有利弊, 查询时比较麻烦,而且效率也差,特别是统计或做列表时.
    如果分类表,加上路径表示法, 那么读查询会提高很多, 不过增加了磁盘开销, 还有个副作用是,如果更新比较频繁,也比较麻烦.
    应该在原型的基础上,根具自己的实际情况,适当调整.
      

  10.   

    低价转让:中#美#爱#梯#科技.Net软件工程师培训课程内容(共35G),声音清晰,课程完整!
    需要这个培训视频的朋友请联系 QQ 936652114