产品、分类和分类属性三者之间存在着一定的关系。每个产品都属于一个分类,而每个分类都有很多个分类属性。现在我们要给产品的属性添加确定的值。下面我有两个方案:
1.做一个产品属性值表,包含产品ID,分类ID,属性ID,产品属性值。
这样可以把所有的产品的属性值都填写进这一张表内,但是产品的数量过多(近2W的数据),会对查询造成影响。2.为每个分类动态生成一个以分类ID为表名的表,包含产品ID,属性ID,属性值。
这样每个表内填写的产品都是属于该分类下的产品属性值,但是这样分类过多(近500个分类),就会生成很多动态表,不知道表多了会有什么影响。另外问一下,句柄是什么意思?mysql与句柄有什么关系,句柄会对查询有影响么?

解决方案 »

  1.   

    我来修改一下你的一些表吧。
    你的表就存在不必要的冗余!关系如下:
    产品 N-1 分类
    分类属性 N-1 分类
    产品属性 N-1 产品产品属性跟分类属性没有关系。
    所以分一下你的两个表:
    1、a.产品ID,分类ID,属性ID。
       b. 属性ID,产品属性值.
     
    2、a.产品ID,属性ID.
       b.属性ID,产品属性值.这样你的两种方案跟添加产品属性完全没有任何关系了。
    根据你说的分类ID大概有500多个.所以两个方案都可行。差别不大。所以你看看我的这个优化例子就很明白了。
    http://blog.csdn.net/yueliangdao0608/archive/2008/10/22/3124371.aspx
      

  2.   

    本帖最后由 yueliangdao0608 于 2008-10-31 16:01:07 编辑
      

  3.   

    那种方案都可以,
    1、你的数据量不大。2万条数据,算是个小表,索引建的合理就行,查询时间也就在毫秒级(几十微秒到几毫秒吧)。
    2、500多个表也不算多,但是也不算少,就是用 myphpadmin 打开时,会有些慢。综合考虑,还是取第一种方案。句柄?个人认为就是地址指针吧,不过,不知道它跟mysql有什么联系。