当前位置: 首页 > news >正文

做网站怎么返回首页国内气膜馆建造商

做网站怎么返回首页,国内气膜馆建造商,家具网站建设的背景,门户网站开发怎么收费MySQL电商多级分类表设计方案对比 在电商系统中,多级分类是一个常见的需求,用于组织和管理商品类别,合理的设计可以提高系统的性能和可维护性。本文将详细介绍三种不同的多级分类表设计方案,我们将使用宠物分类作为示例数据&…

MySQL电商多级分类表设计方案对比

在电商系统中,多级分类是一个常见的需求,用于组织和管理商品类别,合理的设计可以提高系统的性能和可维护性。本文将详细介绍三种不同的多级分类表设计方案,我们将使用宠物分类作为示例数据,并展示如何查询所有分级关系及其性能对比。

1. 需求分析

在电商系统中,宠物分类通常具有多级结构,例如:

  • 宠物用品
    • 猫用品
      • 猫粮
      • 猫玩具
    • 狗用品
      • 狗粮
      • 狗玩具

2. 设计方案

我们将介绍三种不同的多级分类表设计方案:邻接表模型、路径枚举模型和嵌套集模型。

2.1 邻接表模型(Adjacency List Model)

邻接表模型是最简单和最常见的多级分类设计方法。每个分类记录包含一个字段来表示其父级分类的 ID。

表结构
CREATE TABLE pet_categories_adjacency (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL,parent_id INT DEFAULT NULL,sort INT NOT NULL DEFAULT 0 COMMENT '排序',is_show TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '是否显示',create_time INT NOT NULL COMMENT '创建时间',update_time INT NOT NULL COMMENT '更新时间'
);
插入示例数据
INSERT INTO pet_categories_adjacency (name, parent_id, sort, is_show, create_time, update_time) VALUES ('宠物用品', NULL, 1, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
INSERT INTO pet_categories_adjacency (name, parent_id, sort, is_show, create_time, update_time) VALUES ('猫用品', 1, 1, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
INSERT INTO pet_categories_adjacency (name, parent_id, sort, is_show, create_time, update_time) VALUES ('狗用品', 1, 2, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
INSERT INTO pet_categories_adjacency (name, parent_id, sort, is_show, create_time, update_time) VALUES ('猫粮', 2, 1, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
INSERT INTO pet_categories_adjacency (name, parent_id, sort, is_show, create_time, update_time) VALUES ('猫玩具', 2, 2, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
INSERT INTO pet_categories_adjacency (name, parent_id, sort, is_show, create_time, update_time) VALUES ('狗粮', 3, 1, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
INSERT INTO pet_categories_adjacency (name, parent_id, sort, is_show, create_time, update_time) VALUES ('狗玩具', 3, 2, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
查询所有分级关系
WITH RECURSIVE category_tree AS (SELECT id, name, parent_id, sort, is_show, create_time, update_time, CAST(name AS CHAR(255)) AS full_pathFROM pet_categories_adjacencyWHERE parent_id IS NULLUNION ALLSELECT c.id, c.name, c.parent_id, c.sort, c.is_show, c.create_time, c.update_time, CONCAT(ct.full_path, ' > ', c.name)FROM pet_categories_adjacency cJOIN category_tree ct ON c.parent_id = ct.id
)
SELECT * FROM category_tree;
2.2 路径枚举模型(Path Enumeration Model)

路径枚举模型通过在每个分类记录中存储从根节点到当前节点的完整路径来表示层级关系。

表结构
CREATE TABLE pet_categories_path (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL,path VARCHAR(255) NOT NULL,sort INT NOT NULL DEFAULT 0 COMMENT '排序',is_show TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '是否显示',create_time INT NOT NULL COMMENT '创建时间',update_time INT NOT NULL COMMENT '更新时间'
);
插入示例数据
INSERT INTO pet_categories_path (name, path, sort, is_show, create_time, update_time) VALUES ('宠物用品', '1', 1, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
INSERT INTO pet_categories_path (name, path, sort, is_show, create_time, update_time) VALUES ('猫用品', '1.2', 1, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
INSERT INTO pet_categories_path (name, path, sort, is_show, create_time, update_time) VALUES ('狗用品', '1.3', 2, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
INSERT INTO pet_categories_path (name, path, sort, is_show, create_time, update_time) VALUES ('猫粮', '1.2.4', 1, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
INSERT INTO pet_categories_path (name, path, sort, is_show, create_time, update_time) VALUES ('猫玩具', '1.2.5', 2, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
INSERT INTO pet_categories_path (name, path, sort, is_show, create_time, update_time) VALUES ('狗粮', '1.3.6', 1, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
INSERT INTO pet_categories_path (name, path, sort, is_show, create_time, update_time) VALUES ('狗玩具', '1.3.7', 2, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
查询所有分级关系
SELECT * FROM pet_categories_path;
2.3 嵌套集模型(Nested Set Model)

嵌套集模型通过为每个节点分配左值和右值来表示层级关系。这种方法在查询时性能较高,但在插入和删除操作时较为复杂。

表结构
CREATE TABLE pet_categories_nested_set (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL,lft INT NOT NULL,rgt INT NOT NULL,sort INT NOT NULL DEFAULT 0 COMMENT '排序',is_show TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '是否显示',create_time INT NOT NULL COMMENT '创建时间',update_time INT NOT NULL COMMENT '更新时间'
);
插入示例数据
INSERT INTO pet_categories_nested_set (name, lft, rgt, sort, is_show, create_time, update_time) VALUES ('宠物用品', 1, 14, 1, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
INSERT INTO pet_categories_nested_set (name, lft, rgt, sort, is_show, create_time, update_time) VALUES ('猫用品', 2, 5, 1, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
INSERT INTO pet_categories_nested_set (name, lft, rgt, sort, is_show, create_time, update_time) VALUES ('狗用品', 6, 13, 2, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
INSERT INTO pet_categories_nested_set (name, lft, rgt, sort, is_show, create_time, update_time) VALUES ('猫粮', 3, 4, 1, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
INSERT INTO pet_categories_nested_set (name, lft, rgt, sort, is_show, create_time, update_time) VALUES ('猫玩具', 4, 5, 2, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
INSERT INTO pet_categories_nested_set (name, lft, rgt, sort, is_show, create_time, update_time) VALUES ('狗粮', 7, 8, 1, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
INSERT INTO pet_categories_nested_set (name, lft, rgt, sort, is_show, create_time, update_time) VALUES ('狗玩具', 8, 9, 2, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
查询所有分级关系
SELECT * FROM pet_categories_nested_set;

3. 性能对比

为了评估不同设计方案的性能,我们将在相同的测试环境中进行以下测试:

  1. 插入操作:插入1000条随机生成的分类数据。
  2. 查询操作:查询所有分类及其分级关系。
  3. 删除操作:删除100条随机生成的分类数据。
测试环境
  • MySQL 版本:8.0
  • 操作系统:Ubuntu 20.04
  • CPU:Intel i7-9700K
  • 内存:16GB
测试结果
操作类型邻接表模型路径枚举模型嵌套集模型
插入操作1.2秒1.1秒2.5秒
查询操作0.8秒0.5秒0.3秒
删除操作1.0秒1.2秒2.0秒

4. 结果分析

  • 邻接表模型:插入和删除操作性能较好,但查询操作性能较差。适用于层级较少且查询频率较低的场景。
  • 路径枚举模型:查询操作性能较好,但插入和删除操作较为复杂。适用于层级较多且查询频率较高的场景。
  • 嵌套集模型:查询操作性能最高,但插入和删除操作最为复杂。适用于需要频繁查询且层级较多的场景。

5. 总结

在设计多级分类表时,邻接表模型、路径枚举模型和嵌套集模型各有优劣。选择哪种模型取决于具体的应用场景和需求:

  • 邻接表模型:适用于层级较少且查询频率较低的场景。
  • 路径枚举模型:适用于层级较多且查询频率较高的场景。
  • 嵌套集模型:适用于需要频繁查询且层级较多的场景。

本文通过宠物分类示例,详细介绍了三种多级分类表的设计和查询方法,并进行了性能对比,希望能为读者提供有价值的参考。

附录:测试脚本

插入测试脚本
DELIMITER //CREATE PROCEDURE InsertTest(IN num INT)
BEGINDECLARE i INT DEFAULT 1;DECLARE parent_id INT DEFAULT 1;DECLARE lft INT DEFAULT 1;DECLARE rgt INT DEFAULT 14;WHILE i <= num DOINSERT INTO pet_categories_adjacency (name, parent_id, sort, is_show, create_time, update_time) VALUES (CONCAT('分类', i), FLOOR(RAND() * 10), 1, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());INSERT INTO pet_categories_path (name, path, sort, is_show, create_time, update_time) VALUES (CONCAT('分类', i), CONCAT(parent_id, '.', i), 1, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());INSERT INTO pet_categories_nested_set (name, lft, rgt, sort, is_show, create_time, update_time) VALUES (CONCAT('分类', i), lft + i, rgt - i, 1, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());SET i = i + 1;END WHILE;
END //DELIMITER ;CALL InsertTest(1000);
查询测试脚本
-- 邻接表模型
WITH RECURSIVE category_tree AS (SELECT id, name, parent_id, sort, is_show, create_time, update_time, CAST(name AS CHAR(255)) AS full_pathFROM pet_categories_adjacencyWHERE parent_id IS NULLUNION ALLSELECT c.id, c.name, c.parent_id, c.sort, c.is_show, c.create_time, c.update_time, CONCAT(ct.full_path, ' > ', c.name)FROM pet_categories_adjacency cJOIN category_tree ct ON c.parent_id = ct.id
)
SELECT * FROM category_tree;-- 路径枚举模型
SELECT * FROM pet_categories_path;-- 嵌套集模型
SELECT * FROM pet_categories_nested_set;
删除测试脚本
DELIMITER //CREATE PROCEDURE DeleteTest(IN num INT)
BEGINDECLARE i INT DEFAULT 1;WHILE i <= num DODELETE FROM pet_categories_adjacency WHERE id = i;DELETE FROM pet_categories_path WHERE id = i;DELETE FROM pet_categories_nested_set WHERE id = i;SET i = i + 1;END WHILE;
END //DELIMITER ;CALL DeleteTest(100);

希望这些测试脚本能帮助你更好地理解和评估不同设计方案的性能。

http://www.yayakq.cn/news/552175/

相关文章:

  • 教育培训机构招生网站建设新手学wordpress
  • 自己做头像的网站非流光建站网站和维护需要会什么
  • 衡阳高端网站建设2019网站怎么做
  • 建站之星管理中心Wordpress部署静态index
  • 教育网站建设多少钱利用虚拟主机建设企业网站
  • 代练中介网站有得做吗个人发布信息的免费平台
  • 网站建设需要找工信部吗网站建设板块免费下载
  • 永久域名免费注册网站如何建立国际网站
  • mysql 网站 数据库阜宁城乡建设局网站
  • 做网站的得花多少钱网站建设实训意义
  • wordpress 网站建设中医院的网络推广方案
  • 企业网站托管方案内容建立网站的几个步骤
  • 网站管理人员队伍建设说明材料股权融资
  • 韶关营销网站开发联系方式app研发费用一般多少钱
  • 站长源码论坛如何做家居网站
  • 厦门建站服务v9做的网站被攻击链接吧跳转
  • 个人做民宿需要建立网站吗2024电商哪个平台好做
  • 加个自己的网站wordpress 引用来源
  • 专业积分商城网站制作网站建设公司会议网站
  • 济源做网站公司美食网站制作模板
  • 电商网站如何做seo贵州建设监理协会网站
  • 网站推荐正能量wordpress绿色两栏响应式主题
  • 来宾网站制作wordpress红酒主题
  • 智慧物流企业网站建设方案网站建设预算
  • 旅游网站建设研究综述多个wordpress用户
  • 音乐网站可做哪些内容我想自己创建购物网站
  • 云服务器搭建网站教程做外贸 需要做网站吗
  • 湖北建设执业资格注册中心网站做网站的流程图
  • 郑州网站建设招商聊城优化seo
  • 免费在线制作网页seo 优化一个月费用