MySQL的分层数据管理

MySQL的分层数据管理


2024年4月4日发(作者:)

MYSQL中分层数据的管理

MYSQL中分层数据的管理

By Mike Hillyer

引言

大多数用户都曾在数据库中处理过分层数据(hierarchical data),认为分层数据的管理不

是关系数据库的目的。之所以这么认为,是因为关系数据库中的表没有层次关系,只是简单

的平面化的列表;而分层数据具有父-子关系,显然关系数据库中的表不能自然地表现出其

分层的特性。

我们认为,分层数据是每项只有一个父项和零个或多个子项(根项除外,根项没有父项)的

数据集合。分层数据存在于许多基于数据库的应用程序中,包括论坛和邮件列表中的分类、

商业组织图表、内容管理系统的分类、产品分类。我们打算使用下面一个虚构的电子商店的

产品分类:

这些分类层次与上面提到的一些例子中的分类层次是相类似的。在本文中我们将从传统的邻

接表(adjacency list)模型出发,阐述2种在MySQL中处理分层数据的模型。

邻接表模型

上述例子的分类数据将被存储在下面的数据表中(我给出了全部的数据表创建、数据插入的

第1页/总16页

MYSQL中分层数据的管理

代码,你可以跟着做):

CREATE TABLE category(

category_id INT AUTO_INCREMENT PRIMARY KEY,

name VARCHAR(20) NOT NULL,

parent INT DEFAULT NULL);

INSERT INTO category

VALUES(1,'ELECTRONICS',NULL),(2,'TELEVISIONS',1),(3,'TUBE',2),

(4,'LCD',2),(5,'PLASMA',2),(6,'PORTABLE ELECTRONICS',1),

(7,'MP3 PLAYERS',6),(8,'FLASH',7),

(9,'CD PLAYERS',6),(10,'2 WAY RADIOS',6);

SELECT * FROM category ORDER BY category_id;

+­­­­­­­­­­­­­+­­­­­­­­­­­­­­­­­­­­­­+­­­­­­­­+

| category_id | name | parent |

+­­­­­­­­­­­­­+­­­­­­­­­­­­­­­­­­­­­­+­­­­­­­­+

| 1 | ELECTRONICS | NULL |

| 2 | TELEVISIONS | 1 |

| 3 | TUBE | 2 |

| 4 | LCD | 2 |

| 5 | PLASMA | 2 |

| 6 | PORTABLE ELECTRONICS | 1 |

| 7 | MP3 PLAYERS | 6 |

| 8 | FLASH | 7 |

| 9 | CD PLAYERS | 6 |

| 10 | 2 WAY RADIOS | 6 |

+­­­­­­­­­­­­­+­­­­­­­­­­­­­­­­­­­­­­+­­­­­­­­+

10 rows in set (0.00 sec)

在邻接表模型中,数据表中的每项包含了指向其父项的指示器。在此例中,最上层项的父项

为空值(NULL)。邻接表模型的优势在于它很简单,可以很容易地看出FLASH是MP3 PLAYERS

的子项,哪个是portable electronics的子项,哪个是electronics的子项。虽然,在客

户端编码中邻接表模型处理起来也相当的简单,但是如果是纯SQL编码的话,该模型会有很

多问题。

检索整树

通常在处理分层数据时首要的任务是,以某种缩进形式来呈现一棵完整的树。为此,在纯

SQL编码中通常的做法是使用自连接(self-join):

SELECT AS lev1, as lev2, as lev3, as lev4

FROM category AS t1

LEFT JOIN category AS t2 ON = ry_id

LEFT JOIN category AS t3 ON = ry_id

LEFT JOIN category AS t4 ON = ry_id

WHERE = 'ELECTRONICS';

+­­­­­­­­­­­­­+­­­­­­­­­­­­­­­­­­­­­­+­­­­­­­­­­­­­­+­­­­­­­+

| lev1 | lev2 | lev3 | lev4 |

+­­­­­­­­­­­­­+­­­­­­­­­­­­­­­­­­­­­­+­­­­­­­­­­­­­­+­­­­­­­+

| ELECTRONICS | TELEVISIONS | TUBE | NULL |

| ELECTRONICS | TELEVISIONS | LCD | NULL |

| ELECTRONICS | TELEVISIONS | PLASMA | NULL |

第2页/总16页


发布者:admin,转转请注明出处:http://www.yc00.com/news/1712211957a2023797.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信