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

设计一个食品种类表

在这里插入图片描述

需求:设计一个食品种类表,注意食品种类有多层,比如面食下面,面条、方便面,面条下有干面、湿面等

一、食品种类表结构设计(food_category)

CREATE TABLE food_category (category_id INT IDENTITY(1,1) PRIMARY KEY,  -- 分类ID(自增主键)category_name VARCHAR(50) NOT NULL UNIQUE,   -- 分类名称(唯一约束)parent_id INT DEFAULT NULL,                  -- 父级分类ID(NULL表示顶级)level TINYINT DEFAULT 1,                     -- 层级(1-顶级,2-二级,依此类推)path VARCHAR(200) DEFAULT '',                -- 层级路径(如"1.3.5")order_num INT DEFAULT 0,                     -- 排序序号(同层级内排序)create_time TIMESTAMP DEFAULT SYSDATE        -- 创建时间
);-- 外键约束
ALTER TABLE food_category ADD CONSTRAINT fk_parent FOREIGN KEY (parent_id) REFERENCES food_category(category_id);-- 索引优化
CREATE INDEX idx_parent ON food_category(parent_id);    -- 父ID查询优化
CREATE INDEX idx_path ON food_category(path);          -- 路径查询优化 [9](@ref)

二、设计优势解析

  1. 层级管理高效性
    邻接表模型:通过parent_id建立递归关系,支持无限层级扩展(如面食→面条→干面→手工干面)

路径字段辅助:path字段存储层级路径(如"1.3.5"),可通过LIKE快速查询子树(如查询所有面食子类:WHERE path LIKE ‘1.%’)

冗余层级字段:level字段避免递归计算层级深度,提升统计效率(如统计所有三级分类数量)

  1. 查询场景优化
-- 查询某分类所有子孙(含多级)
SELECT * FROM food_category 
WHERE path LIKE '1.%' ORDER BY path;  -- 示例:查找"面食"(ID=1)下所有子类-- 查询直接子分类
SELECT * FROM food_category 
WHERE parent_id = 1 ORDER BY order_num DESC;  -- 示例:查找"面食"的直接子类-- 查询分类完整路径
SELECT c1.category_name AS lv1, c2.category_name AS lv2, c3.category_name AS lv3
FROM food_category c3
LEFT JOIN food_category c2 ON c3.parent_id = c2.category_id
LEFT JOIN food_category c1 ON c2.parent_id = c1.category_id
WHERE c3.category_id = 5;  -- 示例:显示"干面"的路径"面食→面条→干面" [9](@ref)
  1. 数据维护便捷性
    .插入新分类:自动计算level和path(需触发器或程序处理)。
    .移动分类:更新parent_id后级联更新子节点path。
    .排序控制:order_num实现同层级人工排序(如让"方便面"显示在"面条"前面)

四、扩展优化建议

  1. MPTT预排序算法(高频查询场景)
    若需极速查询子树(如万级以上分类),可引入lft和rgt字段实现MPTT算法,将时间复杂度降至O(1)
ALTER TABLE food_category ADD (lft INT DEFAULT 0,rgt INT DEFAULT 0
);
-- 需配套维护程序更新左右值

相关文章:

  • 黑马点评redis改 part 6
  • Spring AOP思想与应用详解
  • 0804标星_复制_删除-网络ajax请求2-react-仿低代码平台项目
  • 量子力学:量子通信
  • 基于javaweb的SpringBoot在线电子书小说阅读系统设计与实现(源码+文档+部署讲解)
  • 收藏按钮变色问题
  • 基于物理信息的神经网络在异常检测Anomaly Detection中的应用:实践指南
  • 猿人学web端爬虫攻防大赛赛题第19题——乌拉乌拉乌拉
  • Java练习1
  • Java 设计模式心法之第26篇 - 解释器 (Interpreter) - 构建领域特定语言的解析引擎
  • 用Python做有趣的AI项目 2【进阶版】:智能聊天机器人 v2(NLTK + 规则引擎)
  • Godot开发2D冒险游戏——第三节:游戏地图绘制
  • 【Hive入门】Hive基础操作与SQL语法:DML操作全面解析
  • uniapp+vue3表格样式
  • 心磁图技术突破传统局限!心血管疾病早筛迈入“三零“新时代
  • 神经网络笔记 - 神经网络
  • 2025年大一ACM训练-搜索
  • VScode在 Markdown 编辑器中预览
  • 聊一聊接口测试的核心优势及价值
  • echarts自定义图表
  • 非法收受财物逾1648万,湖南原副厅级干部康月林一审被判十年半
  • 外交部回应涉长江和记出售巴拿马运河港口交易:望有关各方审慎行事,充分沟通
  • 媒体:每一个“被偷走的人生”,都该得到公道和正义
  • 上海市市管干部任职前公示:赵亮拟为地区区长人选
  • 伊朗港口爆炸事件已致195人受伤
  • 南国置业:控股股东电建地产拟受让公司持有的房地产开发业务等相关资产和负债