产品复合分类数据表设计。

去圣西罗-为尤文喝彩 2012-04-10 02:19:08
一个数据表,现有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)

谢谢。
...全文
95 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
按狼头老大“杀花”的建议。如果table1是myisam(fulltext 产品detail),table2是innodb,INNER JOIN是不是会受影响?
按照这样的设计,如果table1有30万条记录,table2可能会延伸出到200万条记录,我8楼的查询语句,INNER JOIN速度如何?
table2的id和porduct_list,有没有必要做索引?
ACMAIN_CHM 2012-04-11
  • 打赏
  • 举报
回复
你的查询用的SQL语句是什么样?
  • 打赏
  • 举报
回复
数据库还没制作,所以询问大家,按大家的建议,
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 DESC

date是产品插入时间。


然后table3是不是还需要JOIN进去?
还是不需要做数据库,只要做一个json对照表就可以。比如[{"pid":101,"name":"运动鞋"}]
<a href="search.php?type=101">运动鞋</a>
然后 $_POST['type']=101, 查询json数据,得出name为运动鞋。
  • 打赏
  • 举报
回复
我想实现2种搜索。
第一种,按类别查询。这类查询是标签式的。比如:<a href="search.php?type=101">运动鞋</a>,然后按插入时间倒序,20个产品一页,分页打印出所有的运动鞋。

第二种,客户填字搜索。搜索字段为表1的detail列,即根据产品的特征查询,初步设想用 RLIKE 或者 FULLTEXT。
Rotel-刘志东 2012-04-10
  • 打赏
  • 举报
回复
设计如下
1 101
1 201
1 305
2 101
2 202
rucypli 2012-04-10
  • 打赏
  • 举报
回复
设计不合理

连第一范式都不符合 不可再分
ACMAIN_CHM 2012-04-10
  • 打赏
  • 举报
回复
建议比较正规的设计如下。


id porduct_list
1 101
1 201
1 305
2 101
2 202
3 102
3 202
3 334
3 401
ACMAIN_CHM 2012-04-10
  • 打赏
  • 举报
回复
[Quote]然后每次查询时用多表联合查询? (join in)?[/Quote]你想实现什么样的查询? 你可以对比一样两种方案对应同一查询时的不同。
  • 打赏
  • 举报
回复
楼上几位:这样分的话,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)?

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧