码迷,mamicode.com
首页 > 数据库 > 详细

MySQL基础入门学习【9】无限级分类表设计

时间:2018-03-31 21:26:24      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:parent   alt   个数   主机   _id   class   div   分享   家电   

比如: 图书/小说、文学.../四大名著、戏曲.../...

理论上可以设计很多张表;

但是随着分类逐步增多,这些表的数目不可能无限扩展;

所以对于无限级分类表一般我们采用如下形式(通过自身的连接来实现的):

 

技术分享图片

这个例子中我们至少设计三个字段: 分类的id、分类的名称、父类的id.

 

插入记录:

 

  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘家用电器‘,DEFAULT);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘电脑、办公‘,DEFAULT);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘大家电‘,1);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘生活电器‘,1);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘平板电视‘,3);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘空调‘,3);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘电风扇‘,4);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘饮水机‘,4);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘电脑整机‘,2);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘电脑配件‘,2);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘笔记本‘,9);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘超级本‘,9);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘游戏本‘,9);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘CPU‘,10);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘主机‘,10);

技术分享图片

举例说明:

这里家用电器、电脑办公为顶级分类,没有父亲节点,因此parent_id 为0

大家电、生活电器是家用电器的子类,parent_id为1

平板电视、空调属于大家电 --> 3

电风扇、饮水机属于生活电器 --> 4

以此类推...

 

通过【自身连接】实现查找: 同一个数据表对其自身进行连接。一定要取别名,否则无法区分!!!

想象现在在上图的表的右侧有一个结构一模一样的表,想好哪个是父表哪个是子表;

例如右边是子表(查询表)、左边是父表,则左表中的parent_id就没有用了,因为子表中的parent_id字段指向的是父表中的type_id字段

 

技术分享图片

 

我们也可以查找子类、父类和父类下的子类:

参照物不同,现在参照父

技术分享图片

父类以及父类下的子类的数目:

技术分享图片

 

MySQL基础入门学习【9】无限级分类表设计

标签:parent   alt   个数   主机   _id   class   div   分享   家电   

原文地址:https://www.cnblogs.com/jade-91/p/8683996.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!