一个数据表,现有200,000数据,今后会陆续增加到300,000 - 400,000条。现在要记录每一个产品的分类(总计有600-700种,但单一产品最多不超过8个分类),类似这样的数据表如何设计?
这个数据库的主要功能是:随时根据不同分类,将该类的所有产品从数据库里检索出来,附加功能是根据产品名检索。本人知识有限,初步设想如下,分类用数字代替,另有一个副表做参照。比如101代表运动鞋,202代表女鞋,305代表红色的鞋子,401代表nike,501代表美国... 把分类写进一个数据列里(porduct_list [varchar(32)])id  |  porduct_list
1   |  101 201 305
2   |  101 202
3   |  102 202 334 401
...这样设计是否合理?
如果可以。现在要检索出所有的运动鞋。像这类20-40W级的数据表,用like速度快还是fulltext速度快?
select * from porduct_table where porduct_list like '%101%'     (innodb表 + index + 产品名检索用 RLIKE)
或者
select * from porduct_table where match (porduct_list) against ('+101' IN BOOLEAN MODE)  (myisam表+产品名检索和分类搜索均用 fulltext index)谢谢。

解决方案 »

  1.   

    建议比较正规的设计如下。
    id porduct_list
    1 101
    1 201
    1 305
    2 101
    2 202
    3 102
    3 202
    3 334
    3 401
      

  2.   

    楼上几位:这样分的话,20万条数据,可能会变成100多万行。是不是可以这样设置?表1:
    pid | detail
    1   | 产品描述
    2   | 产品描述表2:
    pid | cid
    1    101
    1    201
    1    305
    2    101
    2    202表3 
    cid  | name
    101  | 运动鞋
    201  | 女鞋然后每次查询时用多表联合查询? (join in)?
      

  3.   

    我想实现2种搜索。
    第一种,按类别查询。这类查询是标签式的。比如:<a href="search.php?type=101">运动鞋</a>,然后按插入时间倒序,20个产品一页,分页打印出所有的运动鞋。第二种,客户填字搜索。搜索字段为表1的detail列,即根据产品的特征查询,初步设想用 RLIKE 或者 FULLTEXT。
      

  4.   

    你的查询用的SQL语句是什么样?
      

  5.   

    数据库还没制作,所以询问大家,按大家的建议,
    1 101
    1 201
    1 305
    2 101
    2 202
    这种分发,不可能把产品detail重复写入,所以按4楼的分表设想,查询语句如下:
    SELECT * FROM table1
    INNER JOIN table2 
    ON 
    table1.pid=table2.pid 
    WHERE table2.pid='101' 
    order by table1.date DESCdate是产品插入时间。
    然后table3是不是还需要JOIN进去?
    还是不需要做数据库,只要做一个json对照表就可以。比如[{"pid":101,"name":"运动鞋"}]
    <a href="search.php?type=101">运动鞋</a>
    然后 $_POST['type']=101, 查询json数据,得出name为运动鞋。
      

  6.   

    按狼头老大“杀花”的建议。如果table1是myisam(fulltext 产品detail),table2是innodb,INNER JOIN是不是会受影响?
    按照这样的设计,如果table1有30万条记录,table2可能会延伸出到200万条记录,我8楼的查询语句,INNER JOIN速度如何?
    table2的id和porduct_list,有没有必要做索引?