MYSQL 商城系统设计 商品数据表的设计 商品 商品类别 商品选项卡 多表查询

介绍

在开发商品模块时,通常使用分表的方式进行查询以及关联。在通过表连接的方式进行查询。每个商品都有不同的分类,每个不同分类下面都有商品规格可以选择,每个商品分类对应商品规格都有自己的价格和库存。在实际的开发中应该给这些表进行外键的约束避免垃圾无用的数据
在这里插入图片描述

最终效果

{"id": 541834,"productName": "Kiei","product": { //商品的全部信息"productId": 541834,"productName": "Kiei","price": 416.83,"description": "Navicat Cloud could not connect and access your databases. By which it means, it could only store your connection settings, queries, model files, and virtual group; your database passwords            ","createdAt": "2010-08-07T23:54:41"},"classification": { //商品的类别"id": 1,"majorCategories": {"id": 1,"majorCategories": "家电","smallCategory": {"id": 2,"smallCategory": "空调"}}},"categories": [ //商品购买时选项名称{"categoryId": 228788,"categoryName": "运动与户外用品","sortOrder": 1,//前端根据这个字段排序"options": [ //商品具体购买项{"optionId": 375246,"productId": 541834,"categoryId": 228788,"optionValue": "White Smoke","sortOrder": null //前端根据这个字段排序}]},{"categoryId": 237990,"categoryName": "Apps & Games","sortOrder": 0,  //前端根据这个字段排序"options": [{"optionId": 118132,"productId": 541834,"categoryId": 237990,"optionValue": "雾玫瑰色","sortOrder": null //前端根据这个字段排序}]}]
}

创建商品表

category_id关联的是 商品大类 和 商品小类 的中间表字段
在这里插入图片描述

/*Navicat Premium Dump SQLSource Server         : localSource Server Type    : MySQLSource Server Version : 80012 (8.0.12)Source Host           : localhost:3306Source Schema         : java-testTarget Server Type    : MySQLTarget Server Version : 80012 (8.0.12)File Encoding         : 65001Date: 29/01/2025 18:19:06
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for products
-- ----------------------------
DROP TABLE IF EXISTS `products`;
CREATE TABLE `products`  (`product_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '商品ID',`product_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '商品名称',`price` decimal(10, 2) NULL DEFAULT NULL COMMENT '商品价格',`description` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT '商品描述',`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`category_id` int(11) NULL DEFAULT NULL COMMENT '类目ID',PRIMARY KEY (`product_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1541834 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;SET FOREIGN_KEY_CHECKS = 1;

创建商品大类表

该表只存储大类的商品信息不存其他信息,而其他商品信息应该保存在中间表当中。这样是为了防止结构的耦合。
在这里插入图片描述

CREATE TABLE `java-test`.`Untitled`  (`id` int(11) NOT NULL AUTO_INCREMENT,`major_categories` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '大类',PRIMARY KEY (`id`) USING BTREE,INDEX `idx_id_major_categories`(`id`, `major_categories`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

创建商品小类表

该表只存储商品的小类
在这里插入图片描述

CREATE TABLE `java-test`.`Untitled`  (`id` int(11) NOT NULL AUTO_INCREMENT,`small_category` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '小类名称',PRIMARY KEY (`id`) USING BTREE,INDEX `idx_id_small_category`(`id`, `small_category`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

创建大类小类中间表

ID字段被商品表的category_id关联。
在这里插入图片描述

CREATE TABLE `java-test`.`Untitled`  (`id` int(11) NOT NULL,`major_categories_id` int(11) NULL DEFAULT NULL COMMENT '大类ID',`small_category_id` int(11) NULL DEFAULT NULL COMMENT '小类ID',PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Fixed;

创建套餐表

在这里插入图片描述
在这里插入图片描述

CREATE TABLE `java-test`.`Untitled`  (`category_id` int(11) NOT NULL AUTO_INCREMENT,`category_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '套餐类别',PRIMARY KEY (`category_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 516019 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

套餐选项表

套餐选项包含商品的ID和套餐的ID

CREATE TABLE `java-test`.`Untitled`  (`option_id` int(11) NOT NULL AUTO_INCREMENT,`product_id` int(11) NULL DEFAULT NULL COMMENT '商品ID',`category_id` int(11) NULL DEFAULT NULL COMMENT '套餐ID',`option_value` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '套餐名称',`sort_order` int(11) NULL DEFAULT NULL COMMENT '排序字段',PRIMARY KEY (`option_id`) USING BTREE,INDEX `idx_po_product_category`(`product_id` ASC, `category_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3000005 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

套餐中间表

关联

CREATE TABLE `java-test`.`Untitled`  (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',`category_id` int(11) NOT NULL COMMENT '商品套餐',`sort_order` int(11) NOT NULL COMMENT '套餐排序',PRIMARY KEY (`id`, `category_id`) USING BTREE,INDEX `idx_category_sort_order`(`category_id` ASC, `sort_order` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3000001 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

查询语句

要求查询出 商品信息 商品大类小类 商品套餐 套餐里的选项

 SELECTp.product_id,p.product_name,p.price,p.description,p.created_at,ma.id major_categories_id ,ma.major_categories,sm.small_category,sm.id small_category_id,c.id classification_id,pc.category_name,pc.category_id,po.option_value,po.option_id,po.sort_order option_index,so.sort_order category_index
FROM products pLEFT JOIN classification c ON p.category_id = c.id LEFT JOIN major_categories ma ON c.major_categories_id = ma.id  LEFT JOIN small_category sm ON c.small_category_id = sm.id  LEFT JOIN product_options po ON p.product_id = po.product_idLEFT JOIN product_categories pc ON po.category_id = pc.category_idLEFT JOIN category_association so ON so.category_id = po.category_id
WHERE p.product_id = 541834;

在这里插入图片描述

查询性能

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/9665.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025春晚刘谦魔术揭秘魔术过程

2025春晚刘谦魔术揭秘魔术过程 首先来看全过程 将杯子,筷子,勺子以任意顺序摆成一排 1.筷子和左边物体交换位置 2.杯子和右边物体交换位置 3.勺子和左边物体交换位置 最终魔术的结果是右手出现了杯子 这个就是一个简单的分类讨论的问题。 今年的魔术…

具身智能研究报告

参考: (1)GTC大会&Figure:“具身智能”奇点已至 (2)2024中国具身智能创投报告 (3)2024年具身智能产业发展研究报告 (4)具身智能行业深度:发展…

将ollama迁移到其他盘(eg:F盘)

文章目录 1.迁移ollama的安装目录2.修改环境变量3.验证 背景:在windows操作系统中进行操作 相关阅读 :本地部署deepseek模型步骤 1.迁移ollama的安装目录 因为ollama默认安装在C盘,所以只能安装好之后再进行手动迁移位置。 # 1.迁移Ollama可…

VPR概述、资源

SOTA网站: Visual Place Recognition | Papers With Code VPR(Visual Place Recognition) 是计算机视觉领域的一项关键任务,旨在通过图像匹配和分析来识别场景或位置。它的目标是根据视觉信息判断某个场景是否与数据库中的场景匹…

(Java版本)基于JAVA的网络通讯系统设计与实现-毕业设计

源码 论文 下载地址: ​​​​c​​​​​​c基于JAVA的网络通讯系统设计与实现(源码系统论文)https://download.csdn.net/download/weixin_39682092/90299782https://download.csdn.net/download/weixin_39682092/90299782 第1章 绪论 1.1 课题选择的…

MySQL中的读锁与写锁:概念与作用深度剖析

MySQL中的读锁与写锁:概念与作用深度剖析 在MySQL数据库的并发控制机制中,读锁和写锁起着至关重要的作用。它们是确保数据在多用户环境下能够正确、安全地被访问和修改的关键工具。 一、读锁(共享锁)概念 读锁,也称为…

用HTML、CSS和JavaScript实现庆祝2025蛇年大吉(附源码)

用HTML、CSS和JavaScript庆祝2025蛇年大吉 在这个数字化时代,网页设计不仅仅是为了展示信息,更是传达情感和文化的一种方式。2025年将是蛇年,许多人希望通过各种方式庆祝这一重要的时刻。在这篇文章中,我们将一起学习如何使用HTM…

STM32标准库移植RT-Thread nano

STM32标准库移植RT-Thread Nano 哔哩哔哩教程链接:STM32F1标准库移植RT_Thread Nano 移植前的准备 stm32标准库的裸机代码(最好带有点灯和串口)RT-Thread Nano Pack自己的开发板 移植前的说明 本人是在读学生,正在学习阶段&a…

Unity 粒子特效在UI中使用裁剪效果

1.使用Sprite Mask 首先建立一个粒子特效在UI中显示 新建一个在场景下新建一个空物体,添加Sprite Mask组件,将其的Layer设置为UI相机渲染的UI层, 并将其添加到Canvas子物体中,调整好大小,并选择合适的Sprite&#xff…

JVM栈溢出线上环境排查

#查看当前Linux系统进程ID、线程ID、CPU占用率(-eo后面跟想要展示的列) ps H -eo pid,tid,%cpups H -eo pid,tid,%cpu |grep tid #使用java jstack 查看进程id下所有线程id的情况 jstack pid 案例2 通过jstack 排查死锁问题 #启动java代码 jstack 进…

【Linux权限】—— 于虚拟殿堂,轻拨密钥启华章

欢迎来到ZyyOvO的博客✨,一个关于探索技术的角落,记录学习的点滴📖,分享实用的技巧🛠️,偶尔还有一些奇思妙想💡 本文由ZyyOvO原创✍️,感谢支持❤️!请尊重原创&#x1…

(2)SpringBoot自动装配原理简介

SpringBoot自动装配 这里写目录标题 SpringBoot自动装配启动器主程序自定义扫描包SpringBootApplicationSpringBootConfigurationEnableAutoConfigurationAutoConfigurationPackageImport({AutoConfigurationImportSelector.class})选择器AutoConfigurationEntrygetCandidateCo…

计算机网络 (60)蜂窝移动通信网

一、定义与原理 蜂窝移动通信网是指将一个服务区分为若干蜂窝状相邻小区并采用频率空间复用技术的移动通信网。其原理在于,将移动通信服务区划分成许多以正六边形为基本几何图形的覆盖区域,称为蜂窝小区。每个小区设置一个基站,负责本小区内移…

17.Word:李楠-学术期刊❗【29】

目录 题目​ NO1.2.3.4.5 NO6.7.8 NO9.10.11 NO12.13.14.15 NO16 题目 NO1.2.3.4.5 另存为手动/F12Fn光标来到开头位置处→插入→封面→选择花丝→根据样例图片,对应位置填入对应文字 (手动调整即可)复制样式:开始→样式对话框→管理…

Java面试题2025-并发编程基础(多线程、锁、阻塞队列)

并发编程 一、线程的基础概念 一、基础概念 1.1 进程与线程A 什么是进程? 进程是指运行中的程序。 比如我们使用钉钉,浏览器,需要启动这个程序,操作系统会给这个程序分配一定的资源(占用内存资源)。 …

Java创建项目准备工作

新建项目 新建空项目 每一个空项目创建好后都要检查jdk版本 检查SDK和语言级别——Apply——OK 检查当前项目的Maven路径,如果已经配置好全局,就是正确路径不用管 修改项目字符集编码,将所有编码都调整为UTF-8 创建Spingboot工程 创建Spring…

2007-2020年各省国内专利申请授权量数据

2007-2020年各省国内专利申请授权量数据 1、时间:2007-2020年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区名称、年份、国内专利申请授权量(项) 4、范围:31省 5、指标解释:专利是专利权的简称&…

(一)QT的简介与环境配置WIN11

目录 一、QT的概述 二、QT的下载 三、简单编程 常用快捷键 一、QT的概述 简介 Qt(发音:[kjuːt],类似“cute”)是一个跨平台的开发库,主要用于开发图形用户界面(GUI)应用程序,…

【C语言】main函数解析

一、前言 在学习编程的过程中,我们很早就接触到了main函数。在Linux系统中,当你运行一个可执行文件(例如 ./a.out)时,如果需要传入参数,就需要了解main函数的用法。本文将详细解析main函数的参数&#xff…

自创《艺术人生》浅析

艺术是生活的馈赠,艺术是苦痛的呻吟。 笔记模板由python脚本于2025-01-29 00:01:11创建,本篇笔记适合喜欢写诗读诗诵诗的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值:在于输出思考与经验,而不仅仅是知识的简单复述。 …