博客
关于我
MySQL技巧(二)——无限级分类表设计
阅读量:421 次
发布时间:2019-03-06

本文共 2353 字,大约阅读时间需要 7 分钟。

无限级分类表的设计:掌握“自身连接”

在设计类似图书馆这样的无限级分类系统时,我们不能为每个分类创建独立的表。这种情况下,通常会使用“自身连接”的方法来实现分类之间的关系。以下是具体的实施步骤和查询示例。


数据库设计

我们首先创建一个名为 tdb_goods_types 的表,其中包含以下字段:

  • type_id:分类ID,作为主键自增。
  • type_name:分类名称,长度为50。
  • parent_id:父类ID,非空,默认为0。
CREATE TABLE tdb_goods_types (    type_id            SMALLINT  PRIMARY KEY AUTO_INCREMENT COMMENT '分类ID',    type_name          VARCHAR(50) COMMENT '分类名称',    parent_id          SMALLINT  NOT NULL DEFAULT 0 COMMENT '父类ID');

示例数据插入

为了更好地理解,我们可以插入一些示例数据。以下是部分分类示例:

INSERT INTO tdb_goods_types(type_name, parent_id) VALUES('电子书', DEFAULT);INSERT INTO tdb_goods_types(type_name, parent_id) VALUES('文学', 1);INSERT INTO tdb_goods_types(type_name, parent_id) VALUES('影视原著', 2);INSERT INTO tdb_goods_types(type_name, parent_id) VALUES('中外名著', 2);INSERT INTO tdb_goods_types(type_name, parent_id) VALUES('漫画杂志', 2);INSERT INTO tdb_goods_types(type_name, parent_id) VALUES('文学', 2);INSERT INTO tdb_goods_types(type_name, parent_id) VALUES('小说', 2);INSERT INTO tdb_goods_types(type_name, parent_id) VALUES('传记', 2);INSERT INTO tdb_goods_types(type_name, parent_id) VALUES('经管', 1);INSERT INTO tdb_goods_types(type_name, parent_id) VALUES('金融投资', 9);INSERT INTO tdb_goods_types(type_name, parent_id) VALUES('市场营销', 9);INSERT INTO tdb_goods_types(type_name, parent_id) VALUES('管理学', 9);INSERT INTO tdb_goods_types(type_name, parent_id) VALUES('职场进阶', 9);INSERT INTO tdb_goods_types(type_name, parent_id) VALUES('科学新知', 1);INSERT INTO tdb_goods_types(type_name, parent_id) VALUES('人工智能', 14);INSERT INTO tdb_goods_types(type_name, parent_id) VALUES('电子商务', 14);INSERT INTO tdb_goods_types(type_name, parent_id) VALUES('大数据', 14);INSERT INTO tdb_goods_types(type_name, parent_id) VALUES('科普', 14);

自连接查询

为了获取分类信息及其父类,我们可以使用自连接的方式。以下是两种常见的查询方式:

1. 获取所有子类信息

SELECT     s.type_id AS 分类编号,    s.type_name AS 分类名称,    p.type_name AS 父类名称FROM     tdb_goods_types AS sLEFT JOIN tdb_goods_types AS p ON s.parent_id = p.type_id;

2. 获取父类及其子类数量

SELECT     p.type_id AS 分类编号,    p.type_name AS 父类名称,    COUNT(s.type_name) AS 子类数目FROM     tdb_goods_types AS pLEFT JOIN tdb_goods_types AS s ON s.parent_id = p.type_idGROUP BY     p.type_nameORDER BY     p.type_id ASC;

查询结果解读

通过上述查询,我们可以清晰地看到分类结构。例如:

  • 电子书 是顶级分类,其 parent_id 为0。
  • 文学经管 的子类,其 parent_id 为1。
  • 科普大数据 的子类,其 parent_id 为14。

这种结构使得数据组织清晰,便于后续的数据检索和管理。


通过以上方法,我们可以高效地设计和管理无限级分类表,从而减少数据库表的数量,同时保持数据的组织性和可查询性。

转载地址:http://ayuuz.baihongyu.com/

你可能感兴趣的文章
Objective-C实现binary tree traversal二叉树遍历算法(附完整源码)
查看>>
Objective-C实现binomial coefficient二项式系数算法(附完整源码)
查看>>
Objective-C实现bisection二分法算法(附完整源码)
查看>>
Objective-C实现bisection二等分算法(附完整源码)
查看>>
Objective-C实现BitMap算法(附完整源码)
查看>>
Objective-C实现bitonic sort双调排序算法(附完整源码)
查看>>
Objective-C实现bogo sort排序算法(附完整源码)
查看>>
Objective-C实现boruvka博鲁夫卡算法(附完整源码)
查看>>
Objective-C实现Boyer-Moore字符串搜索算法(附完整源码)
查看>>
Objective-C实现BP误差逆传播算法(附完整源码)
查看>>
Objective-C实现breadth First Search广度优先搜索算法(附完整源码))
查看>>
Objective-C实现BreadthFirstSearch广度优先搜索算法(附完整源码)
查看>>
Objective-C实现BreadthFirstShortestPath广度优先最短路径算法(附完整源码)
查看>>
Objective-C实现bubble sort冒泡排序算法(附完整源码)
查看>>
Objective-C实现Burke 抖动算法(附完整源码)
查看>>
Objective-C实现CaesarsCiphe凯撒密码算法(附完整源码)
查看>>
Objective-C实现cartesianProduct笛卡尔乘积算法(附完整源码)
查看>>
Objective-C实现check strong password检查密码强度算法(附完整源码)
查看>>
Objective-C实现chudnovsky algorithm楚德诺夫斯基算法(附完整源码)
查看>>
Objective-C实现circle sort圆形排序算法(附完整源码)
查看>>