谷粒商城第九天-对商品服务中所涉及到的表的思考

目录

一、总述

二、spu、sku、规格参数、销售属性之间的关系理解

三、相关表设计

1. 属性表

2. 基本属性分组表

3. 分组-基本属性关系表

​4. spu基本属性值表

5. spu详情信息表

6. spu评论表 

7. 商品sku值表

8. sku详情表

9. sku图片表

10. 分类表

11. 品牌表

12. 分类-品牌关系表

13. spu图片表

14. spu基本信息描述表

四、总结


一、总述

我们知道,所有的表,都是通过分析实际需求,设计出来的。

那我们先想一下这里的商品服务有哪些需求:

其实最主要的就是涉及到商品的信息,暂且还不说支付、商品库存、什么的,就着重的说商品信息,肯定涉及到商品的分类、品牌、规格参数、销售参数等信息,这是自然而然就能想出来的

那么到底有哪些业务呢?其实回想我们在网上购物就知道

1. 在商品搜索页面,可以查找对应的商品

这里可以按照商品的分类、品牌、价格等进行搜索

2. 查看商品的详情

就是查看商品的更加详细的信息,比如说商品的各项参数,图文介绍等

3. 最终选择要购买的规格

最终选择合适的一种规格进行购买

4. 收到商品之后可以对商品进行评论

大体就是这样,这是与商品最为紧密的一些业务,所以被划分到商品服务下面。

当然商城项目的核心就是围绕商品展开的,除了上述的核心的商品外,还有许多由商品衍生出来的其他业务,比如说购买商品之后的订单业务、商品的采购库存业务、商品所捆绑的优惠卷业务、会员业务等,这些都是由商品这个核心东西来派生出来的。

今天我就来着重的说一下这个商品。其实之前就做过商品的分类、品牌管理的功能了,只是一些很简单的增删改查,业务也是很简单,也就没有过于的去分析表了。

但是从今天开始,要进行一些有关关于平台属性相关的功能开发了,涉及到商品的分组、商品的规格参数、商品的销售属性。这些业务都不是很简单,通常不是单表操作了,涉及到多表的操作。

首先第一步当然是理解好各表的含义,各表之间的关系。

二、spu、sku、规格参数、销售属性之间的关系理解

首先先来理解下商品服务中重要的两个概念:spu和sku

其实很简单。

spu就是商品,就是单纯的一种商品,不涉及到具体的商品下的某一款,其实也就是最先购物时脑子里面所想的,最先想到的当然是,我这次到底时需要买一件什么东西,比如我今天需要去买一部手机,需要去买一台电视机,需要买一台空调等等...这就是对应一个spu

但是随后在真正买的时候,通常需要指定好我到底需要买这件商品的什么规格的,比如说手机有许多的内存规格供我们进行选择,电视机就有许多的尺寸大小供我们进行选择,这其实就对应一个sku

其实spu和sku就好比是Java中类和对象的关系,spu就是一个类,只是商品本身。而sku则是这个类下面的具体的一个对象,具体的一个规格。

那么spu和sku现在简单的理解了一下,那与规格参数还有销售属性之间又有什么关系呢?

先来说一下,规格参数和销售到底是什么?、

规格参数就是当我们查看商品的详情的时候,下面的规格参数详情,手机的话,就有电池容量,拍照像素,手机分辨率等规格参数,如图:

规格前面有其对应的分组:

而销售属性,则是真正买的时候所选的具体规格,如图:

那么spu与sku和规格参数还有销售属性有什么联系呢?

spu和规格参数还有图文信息绑定在一起,也就是说一个spu不同的sku下的规格参数还有图文信息都是一样的,其实不仅如此,通常即使不是同一个spu,也就是不是同一件商品,规格参数也是那些东西,当然图文信息变了,其实规格参数大致都一样,这么说吧,即使不同的品牌,其这些规格参数都差不多,只不过可能是少了某些属性或者是多了某些属性,而其实也就是手机这一分类下,规格参数都差不多,所以规格参数和三级分类绑定在一起,既然规格参数都差不多,规格参数的上一级:分组信息也是差不多的。

上面那么多话总结起来就是:

一个分类下面有着多个spu,但是这多个spu的规格参数基本一样,分组也基本一样

一个spu下面有着多个sku,一个sku就是选定了多个销售属性的值的一种组合,例如一台手机有3中颜色,有3种内存,那么就一共有9种sku

就是一个spu下面有多个sku

三、相关表设计

1. 属性表

规格属性还有销售属性存在这张表

有个时候基本属性是可以检索的,比如手机的cpu,所以提供可检索字段,提供可选值列表,还有所属分类的id字段

2. 基本属性分组表

就是基本属性的前面一个组,所以和基本属性差不多,表结构差不多

 

也是提供一个分类id的字段

因为无论是分组还是基本属性,一个分类下面有多个,比如手机下面有很多分组,基本信息,屏幕信息啥的,也有很多基本属性,在一个分组下面就有许多基本属性了,所以都放上一个分类id字段

有的人可能会想,既然我分组都知道是属于哪个分类下面了,基本属性又在这个分组下面,那我不也就自然的知道基本属性在哪个分类下面吗?为什么在基本属性表中还要放上这个分类id字段呢?

其实这就是属于冗余设计,记得别人说过这么一句话,要想作数据库设计,第一步就是摒弃数据库设计三范式,当然这有点夸张了,其实三范式确实也就是为了减少冗余而存在的这么一套法则,但是为了减少冗余而将表进行拆分,查的时候就需要进行联表查,效率不高。

因此还是保留了分类id字段,这是为了方便以后的基本属性那里直接可以看到所属分类,而不必再去通过分组表查到分类id,提高了效率,这种冗余字段在数据库中很常见,得习惯。 

3. 分组-基本属性关系表

分组和基本属性之间是属于多对多的关系,因此需要第三张表-关系表

4. spu基本属性值表

 这个没什么好说的,虽然现在有了其属性,但是真正的值,就需要新的一张表来记录了。这里存了属性id和属性名称,属性名称也是冗余字段

5. spu详情信息表

 上面的商品基本属性值表,只是给出了spuid,至于spu也就是商品的详细信息没有,要获取详细信息,比如描述,品牌,所属分类等信息,就需要spu详细信息表

6. spu评论表 

保存着一件商品的评论信息,包含用户、评论内容、点赞数、回复数等信息

7. 商品sku值表

 这个就保存着商品的sku下的各个属性的值,比如说1号sku下面的颜色属性什么值,1号下面的版本属性什么值

也就是存放所有的sku再细分的销售属性值,其实sku编号只有各个销售属性值的乘积个数,但是还要细分属性值到底是多少,就多了

8. sku详情表

 这张表就是每个sku的详情,比如说这种套餐下面的标题,描述,价格,默认图片等信息

9. sku图片表

 存放着一个sku下面的多种图片

上面这些是主要的表还有一些表

比如说:

10. 分类表

11. 品牌表

12. 分类-品牌关系表

13. spu图片表

14. spu基本信息描述表

四、总结

主要是讲了商品服务中两个重要的概念:spu和sku,阐述了其基本含义,与基本属性,销售属性,分类间的关系,另外还对商品服务中所涉及到的表进行简要说明。表设计的思路还是很重要的,要根据具体的业务需要来进行设计。

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

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

相关文章

助力工业物联网,工业大数据之服务域:安装主题分析实现【二十七】

文章目录 09:服务域:安装主题分析实现10:服务域:维修主题分析实现 09:服务域:安装主题分析实现 目标:掌握安装主题的需求分析及实现 路径 step1:需求step2:分析step3&am…

深入解析人脸识别技术:原理、应用与未来发展

人脸识别技术:从原理到应用 引言人脸识别技术的重要性和应用领域 人脸识别的基本原理图像采集与预处理特征提取与表征数据匹配与比对 传统人脸识别方法主成分分析(PCA)线性判别分析(LDA)小波变换在人脸识别中的应用 深…

Grafana集成prometheus(3.Grafana添加promethus数据)

添加数据库 选择Connections -> Datasources,点击Add New data source,填写Promitheus Server Url,点击 save & test完成配置 添加DashBorad 选择prometheus数据库选择code填入对应的查询公式(监控公式参考Prometheus监控公式)修改面板名称Ti…

Centos虚拟机忘记密码-修改密码

1.重启系统 2.在这个选择界面,按e建 3.找到如下位置,插入init/bin/sh 4.填写完成后按Ctrlx引导启动 5.输入mount -o remount, rw / (注意空格) 6.重置密码 出现以下为重置成功 7.执行touch /.autorelabel 8.退出exec /sbin/init 9.输入你的新密…

flutter开发实战-video_player视频播放功能及视频缓存

flutter开发实战-video_player视频播放功能及视频缓存 最近开发过程中video_player播放视频, 一、引入video_player 在pubspec.yaml引入video_player video_player: ^2.7.0在iOS上,video_player使用的是AVPlayer进行播放。 在Android上,…

代码分析:循环创建N个子进程——为什么最后一个属于父进程?

黑马C/C 2018年32期代码分析 //循环创建n个子进程 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <unistd.h>int main() {int i 0;for(i0; i<3; i){//创建子进程pid_t pid fork();if(pid&…

EMD经验模态分解介绍

EMD概述 其实一种信号分解方法&#xff0c;是一种自适应的数据处理方法&#xff0c;适合非线性和非平稳时间序列的分析和研究&#xff0c;其本质是对数据序列或信号的平稳化处理。 将上面6个信号叠加如下&#xff1a; 就是6个简单信号叠加&#xff0c;形成一个复杂信号。 核心…

关于 Ubuntu 长按 shift 无效, 按 Esc 直接进入 grub 改密码的解决方法

本次长按shift没有反应&#xff0c;直接进入了系统界面&#xff0c;所以改用长按Esc键&#xff0c;步骤如下&#xff1a; 1. 长按esc&#xff0c;进入grub>提示 2.输入grub>normal &#xff0c;回车 3.上一步回车后&#xff0c;继续敲击Esc &#xff0c;出现grub界面 …

2023.08.01 驱动开发day8

驱动层 #include <linux/init.h> #include <linux/module.h> #include <linux/of.h> #include <linux/of_irq.h> #include <linux/interrupt.h> #include <linux/fs.h> #include <linux/gpio.h> #include <linux/of_gpio.h>#…

嵌入式开发学习(STC51-7-矩阵按键)

内容 按下S1-S16键&#xff0c;对应数码管最左边显示0-F 矩阵按键简介 独立按键与单片机连接时&#xff0c;每一个按键都需要单片机的一个I/O 口&#xff0c;若某单片机系统需较多按键&#xff0c;如果用独立按键便会占用过多的I/O口资源&#xff1b;而单片机 系统中I/O口资…

【网络编程·传输层】UDP和TCP的报头

目录 一、端口号划分 二、部分指令 1、pidof&#xff08;用于查看进程id&#xff09; 2、netstat&#xff08;查看网络状态&#xff09; 三、UDP协议 1、UDP协议格式 2、UDP协议如何进行封装、解包、分用 2.1封装、解包 2.2分用 3、UDP协议的特点 3.1UDP协议的特点 …

装饰器模式(C++)

定义 动态(组合)地给一个对象增加一些额外的职责。就增加功能而言&#xff0c;Decorator模式比生成子类(继承)更为灵活(消除重复代码&减少子类个数)。 一《设计模式》 GoF 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xf…

【深度学习环境】安装anaconda、tensorflow、pycharm

目录 1.安装anaconda 2.安装tensorflow-gpu 3.安装pycharm 4.VNC操作 5.安装Pytorch PS: linux下常见的操作&#xff1a; 1.Linux下强制关闭程序&#xff1a; 2.导出环境 2.1.pip导出 2.2.conda导出 2.3.其他 3.windows下的环境安装 & pycharm远程配置 4.bash…

PostgreSQL Patroni_exporter 监控 patroni高可用工具

Patroni是Cybertec公司基于python语言开发的&#xff0c;可用于使用流复制来创建&#xff0c;管理&#xff0c;维护和监视高可用性PostgreSQL集群设置的工具。 目前&#xff0c;PatroniEtcd 是最为推荐的PostgreSQL数据库高可用方案之一。 PostgreSQL有postgres_exporter监控采…

人工智能学习07--pytorch23--目标检测:Deformable-DETR训练自己的数据集

参考 https://blog.csdn.net/qq_44808827/article/details/125326909https://blog.csdn.net/dystsp/article/details/125949720?utm_mediumdistribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-125949720-blog-125326909.235^v38^pc_releva…

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(18)-Fiddler如何接口测试,妈妈再也不担心我不会接口测试了

1.简介 Fiddler最大的优势在于抓包&#xff0c;我们大部分使用的功能也在抓包的功能上&#xff0c;fiddler做接口测试也是非常方便的。 领导或者开发给你安排接口测试的工作任务&#xff0c;但是没有给你接口文档&#xff08;由于开发周期没有时间出接口文档&#xff09;&…

ProgressBar基本使用

作用&#xff1a;进度条&#xff0c;用于展示某个任务的完成情况&#xff0c; 常用属性&#xff1a; 设定进度条的最大、最小值、自增步长 常用事件&#xff1a; 后台代码&#xff1a; private void progressBar1_Click(object sender, EventArgs e){Thread t;//使用线程执行…

TabR:检索增强能否让深度学习在表格数据上超过梯度增强模型?

这是一篇7月新发布的论文&#xff0c;他提出了使用自然语言处理的检索增强Retrieval Augmented技术&#xff0c;目的是让深度学习在表格数据上超过梯度增强模型。 检索增强一直是NLP中研究的一个方向&#xff0c;但是引入了检索增强的表格深度学习模型在当前实现与非基于检索的…

uniapp:图片验证码检验问题处理

图形验证码功能实现 uniapp&#xff1a;解决图形验证码问题及利用arraybuffer二进制转base64格式图片&#xff08;后端传的图片数据形式&#xff1a;x00\x10JFIF\x00\x01\x02\x00…&#xff09;_❆VE❆的博客-CSDN博客 UI稿&#xff1a; 需求&#xff1a;向后端请求验证码图片&…

03 制作Ubuntu启动盘

1 软碟通 我是用软碟通制作启动盘。安装软碟通时一定要把虚拟光驱给勾选上&#xff0c;其余两个可以看你心情。 2 镜像文件 我使用清华镜像网站找到的Ubuntu镜像文件。 Index of /ubuntu-releases/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 请自己选择镜像…