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

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

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

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

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

这个例子中我们至少设计三个字段: 分类的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字段

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

参照物不同,现在参照父

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

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

时间: 2024-10-09 11:05:56

MySQL基础入门学习【9】无限级分类表设计的相关文章

MySQL技巧(二)——无限级分类表设计

无限级分类表的设计(掌握'自身连接') 类似图书这种,会有很多种分类,而且在现实生活中这种分类会无限的往下分,所以不可能每有一个分类就创建一个分类表.应该使用下面这种语句 DROP TABLE IF EXISTS tdb_goods_types; CREATE TABLE tdb_goods_types( type_id SMALLINT PRIMARY KEY AUTO_INCREMENT COMMENT '分类ID', type_name VARCHAR(50) COMMENT '分类名称'

MySQL基础入门学习【10】多表删除

DELETE tbl_name [.*] [, tbl_name[.*]]... FROM table_references [WHERE where_condition] 现在想把重复的记录删除掉,保留id号比较小的记录. 一张表模拟多表删除来实现: (1) 查找重复记录 (2) 参照这张表来删除上面那个表中的数据 [涉及 子查询.连接.多表更新.多表删除 : 多表操作时实现了自身的连接:通过自身的连接删除重复的记录] 原文地址:https://www.cnblogs.com/jade-91/

MYSQL基础入门学习【2】

1. 数据类型:指列.存储过程参数.表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型 (1) 整型(按存储范围分类):TINYINT(1字节) SAMLLINT(2字节) MEDIUMINT(3字节) INT(4字节) BIGINT(8字节) 数据优化的一个原则: 选择最合理.最合适的数据类型,而不是最大的数据类型.存储范围越大占的空间就越大. (2) 浮点数(按存储范围分类):单精度浮点FLOAT [(M,D)]  双精度浮点DOUBLE[(M,D)]: M:数字总位数

MYSQL无限级分类表设计及自我连接

我们有这样一个需求: 做一个城市联动,比如说贵州省,省下面有众多市,市下面有众多区县,区县下面有众多镇,如果用多张表来存储,必然是能够简单的实现联动效果,但是多表的联合查询必然会影响到一些效率,此时可以考虑 用一张表来实现. 还有当我们要分的级数是不确定的,或者是很多的,那么建立多张表也是不合理的设计. 如何用一张表来存储呢? 该表的建立代码如下: 1 create table city(id smallint unsigned auto_increment primary key, 2 cit

Mysql基础入门-SQL_DDL语句

一.mysql数据库介绍: mysql数据库属于关系型数据库,关系型数据库是指采用关系模型来组织数据的数据库,似于Excel函数关系表.保持数据的一致性是关系型数据库的最大优势 关系型数据库瓶颈: 1.高并发读写硬盘I/O瓶颈; 2.对于关系型数据来说在一张海量数据表中查询效率是非常低的: 3.横向扩展困难,当一个应用系统用户量访问与日俱增的时候数据库没有办法像web server那样简单的通过添加更多的硬件或者节点来扩展和提供负载能力. 对于并发量不高及数据量较小的应用系统mysql还是占有很

SQL Server 2008从基础开始学习历程(1)------创建表与查询

[by:yy] 无论我们学什么呢,都要讲究一个Why,一个How.那么我们为什么要学SQL呢?无非就那么几点. 1.为了适应其他技术,和其他技术配对而学. 我个人的理解呢,只要在IT行业,无论你学什么,或者做什么工作.都离不开数据库.而学习数据库呢,又太文字化了,看的心里就烦.我是很抵触文字的.看着一大排一大排的字,就怕.可能是大天朝的教育所致.已经怕了学生生涯了. 2.为了适应社会而学. 随便找个招聘信息,都会有标注需要会SQL语言啊.了解MySql呀.会搞Oracle呀.所以呢,为了能在找工

零基础入门学习java,应该如何快速打好Java基础?

零基础入门学习java,应该如何快速打好Java基础?从大学到现在,我使用Java已经将近20年,日常也带实习生,还在公司内部做training,所以可以分享下我的经验,希望对你有用. 创一个小群,供大家学习交流聊天如果有对学java方面有什么疑惑问题的,或者有什么想说的想聊的大家可以一起交流学习一起进步呀.也希望大家对学java能够持之以恒java爱好群,如果你想要学好java最好加入一个组织,这样大家学习的话就比较方便,还能够共同交流和分享资料,给你推荐一个学习的组织:快乐学习java组织

鱼C《零基础入门学习Python》10-17节课时知识点总结

第10讲:列表:一个打了激素的数组 1. 列表都可以存放一些什么东西?  我们说 Python 的列表是一个打了激素的数组,如果把数组比喻成集装箱,那么 Python 的列表就是一个大仓库,Ta 可以存放我们已经学习过的任何数据类型. 2. 向列表增加元素有哪些方法?  三种方法想列表增加元素,分别是:append().extend() 和 insert().    3. append() 方法和 extend() 方法都是向列表的末尾增加元素,请问他们有什么区别?  append() 方法是将

Linux基础入门---学习心得

接近一周的Linux基础入门学习,使我对Linux有了较为全面和整体的认识,通过本周的学习我把Linux与Windows进行比较发现相对于Windows,Linux有许多特别的区别去Windows的地方,并且对Linux中的指令操作也有了一定的了解,学会了一些基本的指令操作. Linux的一大特点是多用户,在Linux中可以创建多个用户每一个用户的权限是不同的,所有用户的存储都一起储存在同一个物理硬盘中但是用户与用户之间的存储信息又被虚拟隔离了,即每个用户对自己的资源(例如:文件.设备)有特定的