thinkphp商城系统之商品模块表设计

news2024/12/25 23:45:16

5.后台商品模块

商品模块是商城项目最核心的模块,也是最复杂的。如果说你能掌握这个模块,那对你来说绝对是获益匪浅,这模块会涉及到以下知识点:

  1. 聊聊电商领域中的SPUSKU
  2. 表的设计,告诉你为什么要这么设计
  3. 复杂的查询,例如属性筛选

篇幅限制,可以访问:实力进阶,教你使用thinkphp6开发一款商城系统,如果对你有帮助,记得点赞哈~

5.1SPU和SKU

在电商领域,SPU(Standard Product Unit)和SKU(Stock Keeping Unit)是两个常用的概念,用于对商品进行分类和管理。

SPU的定义:指标准化的产品单元,通常指一组具有相似属性、功能和用途的商品。SPU可以看作是一类商品的集合,具有相同的基本特征。

如图,这是京东商城商品列表

在这里插入图片描述

相信买东西的时候大家都打开过这样的一个列表页,可能很多时候你把列表中的商品理解为一个具体的产品。实际上它是一个spu,它包含了一些通用的属性,例如cpu型号、内存、屏幕尺寸、颜色等,并且还有一组通用的图片和描述。

SKU定义:它就是具有独特属性的单个具体产品

如图

在这里插入图片描述

点击某个spu,进入具体的spu详情,里面展示的是每个具体的sku,比如图片中的每种颜色和版本的组合就是一个具体sku,每个sku都有自己的属性及库存。

5.2表设计

商品模块相关表的设计很复杂,涉及到的表非常多,下面我会一个个的讲,以后大家项目中遇到可以适当的参考一下。

5.2.1品牌表

字段类型备注
idint(10) unsigned主键(PRIMARY)
brand_namevarchar(30)品牌名称
brand_imagevarchar(255)品牌图片
sortint(11)排序
remarkvarchar(255)品牌介绍
is_showtinyint(1)是否显示:1-是.0-否
creatorint(11)创建者
updatorint(11)更新者
create_timedatetime创建时间
update_timedatetime更新时间
delete_timedatetime删除时间

如果说商品涉及到品牌,那么就需要有相应的品牌管理功能,一般来说涉及到名字、图片、排序等字段,至于展示端展示的是名称还是图片,这就看具体需求。

5.2.2分类表

字段类型备注
idint(10) unsigned主键(PRIMARY)
pidint(11)父级id
category_namevarchar(30)分类名称
imagevarchar(255)分类图片
remarkvarchar(255)分类描述
leveltinyint(1)等级
sortint(11)排序
is_showtinyint(1)是否显示:1-是;0-否
is_recommendtinyint(1)是否首页推荐:1-是;0-否
creatorint(11)创建者
updatorint(11)更新者
create_timedatetime创建时间
update_timedatetime更新时间
delete_timedatetime删除时间

商品分类表是非常重要的,我们买东西的时候一般会选择分类,例如手机、衣服、笔记本、食品等分类。这里的pidlevel字段是跟分类层级有观的,因为分类有一级分类、二级分类、三级分类,甚至更多,另外还有个”是否首页推荐“字段,适用于首页展示某些商品,也是常用需求之一。

5.2.3规格表

字段类型备注
idint(10) unsigned主键(PRIMARY)
cate_idint(11)最后一级商品分类ID
spec_namevarchar(30)规格名称
sorttinyint(4)排序
is_advancedtinyint(1)高级选项:0-否, 1-是
is_showtinyint(1)显示:0-否,1-是
creatorint(11)创建者
updatorint(11)更新者
create_timedatetime创建时间
update_timedatetime更新时间
delete_timedatetime删除时间

商品规格或者说属性,这里的属性是跟分类绑定的,因为不同的分类有不同的属性,例如手机、衣服属性是不一样的,另外鉴于页面的展示的原因,一般需要把属性划分为高级选项和普通选项,这个可参考京东。如果说你属性没有那么多,其实没必要设置高级选项。

5.2.4规格属性值表

字段类型备注
idint(10) unsigned主键(PRIMARY)
spec_idint(11)规格ID
spec_valuevarchar(30)规格属性值
sorttinyint(4)排序
is_showtinyint(1)是否显示:1-是,0-否
creatorint(11)创建者
updatorint(11)更新者
create_timedatetime创建时间
update_timedatetime更新时间
delete_timedatetime删除时间

这个也很好理解,每个属性都有多个值,例如手机的属性-机身内容它有1TB、512GB、256GB等值

5.2.5商品表

字段类型备注
idint(10) unsigned主键(PRIMARY)
goods_namevarchar(150)商品名称
goods_spubigint(20)商品SPU
one_cate_idint(11)一级分类
two_cate_idint(11)二级分类
three_cate_idint(11)三级分类
four_cate_idint(11)四级分类
brand_idint(11)品牌
supplier_idint(11)供应商
imagevarchar(255)商品主图
remarkvarchar(255)商品简介
contenttext商品详细描述
statustinyint(1)商品状态:-1-回收站;0-下架;1-上架
sortint(11)排序
sales_sumint(11)商品销量
comment_sumint(11)评论数量
click_sumint(11)点击数量
pricedecimal(10,2)商品价格
discount_factordecimal(10,2)折扣系数
freight_typetinyint(1)运费类型:1-包邮;2-统一运费;3-运费模板
freight_pricedecimal(10,2)统一运费金额
freight_template_idint(11)运费模板
is_newtinyint(1)新品推荐:1-是;0-否
is_hottinyint(1)热点产品:1-是;0-否
is_teamtinyint(1)开启拼团:1-是;0-否
creatorint(11)创建者
updatorint(11)更新者
create_timedatetime创建时间
update_timedatetime更新时间
delete_timedatetime删除时间

商品表存储什么字段,都是根据实际业务来设计的,下面我分下面几点来解释

  1. 像商品名、图片、价格这些用于展示的,都是必须的。
  2. 商品SPU,这个字段是商品的唯一标识,像京东商品之间的关联就是使用SPU,而不是自增ID,不过我们使用自增ID关联即可,一般来说使用php开发都是一些小商城了,没有那么规范,这里提出来主要是让大家知道有这么一个设计原则。
  3. 四级分类,这里限定了四级分类,如果说还不够,那么加字段,弄到五级即可。
  4. 商品详细描述,正常来说不应该存储到这里的,这里应该拆分多一个表专门存储商品的详细描述,但也要看实际情况,如果说你开发的商城,商品数量就一两万,拆不拆分都可以,因为几乎不影响性能。就算以后数据量突然暴增,到时拆分开也可以。
  5. 排序,一般用户会看销量、评论数量,因此记录这两个数就很有必要了。
  6. 销售手段,比如说新品推荐、热点产品、拼图等等
  7. 跟运费有关的些字段,比如免运费、统一运费等

5.2.6评论表

字段类型备注
idint(11)主键(PRIMARY)
goods_idint(11)商品ID
goods_item_idint(11)某种规格商品ID
order_goods_idint(11)订单商品表id
user_idint(11)用户ID
goods_startinyint(1)商品评论星级:1-5星
service_startinyint(1)服务评论星级:1-5星
express_startinyint(1)物流评论星级:1-5星
commentvarchar(255)商品评论
replyvarchar(255)商家回复
statustinyint(1)显示状态 0-隐藏 1-显示
create_timedatetime创建时间
update_timedatetime更新时间
delete_timedatetime删除时间

商品评论需要记录商品ID,具体的某款产品(SKU)ID,评论的用户ID,评论内容,另外还设置了商品的评价、售后服务的评价、无论的评价。

5.2.7评论的图片/视频表

字段类型备注
idint(10) unsigned主键(PRIMARY)
typetinyint(1)文件类型:1-图片,2-视频
goods_comment_idint(11)商品评价id
urlvarchar(255)文件链接l
create_timedatetime创建时间
update_timedatetime更新时间
delete_timedatetime删除时间

用户上传商品的图片和视频

5.2.8商品拥有的规格属性表

字段类型备注
idint(10) unsigned主键(PRIMARY)
goods_idint(11)商品ID
spec_idint(11)规格ID
spec_value_idint(11)规格属性ID
create_timedatetime创建时间
update_timedatetime更新时间
delete_timedatetime删除时间

这里存储了商品ID、规格ID、规格属性ID,这个表主要用于属性筛选

5.2.9商品SKU表

字段类型备注
idint(10) unsigned主键(PRIMARY)
goods_idint(11)商品ID
titlevarchar(100)标题
skubigint(20)商品SKU
spec_idsvarchar(200)多个规格id,隔开
spec_value_idsvarchar(200)多个规格属性值ID,隔开
market_pricedecimal(10,2)市场价
pricedecimal(10,2)价格
cost_pricedecimal(10,2)成本价
stockint(10)库存
bar_codevarchar(200)条码
creatorint(11)创建者
updatorint(11)更新者
create_timedatetime创建时间
update_timedatetime更新时间
delete_timedatetime删除时间

这个表主要是存储了用于商品详情展示的信息,比如说规格、价格、库存等,注意这里存储规格和规格属性值,后面我们可以看看如何进行筛选。

另外这里我们也新增了商品SKU字段,其意义跟SPU类似。

5.2.10 商品SKU主图

字段类型备注
idint(10) unsigned主键(PRIMARY)
typetinyint(1)文件类型:1-图片,2-视频
skubigint(20)商品评价id
urlvarchar(255)文件链接
create_timedatetime创建时间
update_timedatetime更新时间
delete_timedatetime删除时间

详情里面的轮播图

5.2.11商品点击表

字段类型备注
idint(10) unsigned主键(PRIMARY)
user_idint(11)用户ID
goods_idint(11)商品ID
creatorint(11)创建者
updatorint(11)更新者
create_timedatetime创建时间
update_timedatetime更新时间
delete_timedatetime删除时间

为什么要这个表?对于一些体量比较大的商城来说,收集用户的行为是非常重要的,这个不单单说后台用于页面的统计,更多的是用于推荐系统,他们需要足够大的数据去训练推荐模型。

5.2.12 商品收藏表

字段类型为空额外默认整理备注
idint(10) unsignedPKauto_increment主键(PRIMARY)
user_idint(11)YES0用户ID
goods_idint(11)YES0商品ID
create_timedatetimeYES创建时间
update_timedatetimeYES更新时间
delete_timedatetimeYES删除时间

这个也是收集用户行为相关的表

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实现 wsl ssh 自启动

目录 一、wsl 端操作1.1 创建并编辑 /etc/init.wsl,加入如下内容,并保存1.2 对文件 /etc/init.wsl 添加执行权限1.3 编辑sudoers,避免输入密码 二、windows 端操作2.1 新建 startservice.vbs 文件,并保存如下内容2.2 实现脚本 sta…

前端使用XLSX导出excel表格

1 单个sheet page.js(页面中的导出方法) import { exportExcel } from ../../../utils/exportExcel.js; leadOut() {const arr [{ id: 1, name: 张三, age: 14, sex: 男 },{ id: 2, name: 李四, age: 15, sex: 女 },{ id: 3, name: 王五, age: 16, sex: 男 },];const allR…

MySQL数据恢复之binlog2sql的安装和使用,很详细

MySQL数据恢复之binlog2sql的安装和使用,很详细 一、前言二、binlog2sql的介绍三、安装binlog2sql1、安装git(已安装可以跳过)(1)、正常安装(2)、编译安装报错①、安装libcurl (2&am…

Win11专业版,eNSP启动失败,错误代码40 解决方法

微软Win11系统默认开启的 Virtualization-based Security (VBS)“基于虚拟化的安全性”会导致游戏、跑分性能下降。VBS 基于虚拟化的安全性,通常称为内核隔离。使用硬件虚拟化在内存中创建安全区域,为其他安全功能提供了一个安全平…

DNSLog漏洞探测(五)之XXE漏洞实战

DNSLog漏洞探测(五)之XXE漏洞实战 本文我们来学习如何利用DNSLog平台探测目标网站是否存在RCE漏洞,接下来我们还是利用Pikachu的靶场作为演示。首先我们先进入Pikachu靶场的XXE漏洞界面。 如果此时网站的界面存在着无回显的XXE漏洞,这种情况下&#xff…

JMeter直连数据库

JMeter直连数据库 使用场景操作步骤 使用场景 用作请求的参数化 登录时需要的用户名,密码可以从数据库中查询获取 用作结果的断言 添加购物车下订单,检查接口返回的订单号,是否与数据库中生成的订单号一致 清理垃圾数据 添加商品后&#xff…

美团P3-2大佬写给初中级前端的《高级进阶面试指南》

都说金9银10,节前自己也去面试了几家公司,幸而都收到了offer。如今已经入职美团两月有余,最近闲来有空,整理一番,希望对各位找工作有帮助。 说在前面,我的答案仅供参考。答案有不全或有偏颇之处&#xff0…

Linux 搭建 gitlab

目录 前言安装依赖项添加GitLab存储库安装GitLab CE创建新存储目录编辑GitLab配置文件,例如更改默认域名或端口:重新配置并启动GitLab服务以应用更改:前言 centos搭建gitlab代码仓库 安装依赖项 在安装GitLab之前,您需要先安装一些必要的依赖项: yum install -y curl …

Clique expension和star expension

Clique expension(团扩展),也叫连通分量扩展。 其含义是:将超边中所有顶点都连接在一起,比如有3个顶点的超边,扩展成普通图时两两相连就会有3条边。以此类推。连接和n个顶点的超边拓展后有条边。同一个超边…

keil生成bin文件(通用型)

有些时候需要在keil里面生成bin文件,但找到的各种方式五花八门,特别是要填写文件路径等没有通用性,搞个不同的工程就得改下,找到这个跟路径无关的代码,进行记录下。 首先还是点开keil的设置: 按照上面的图…

前沿技术|张磊:RR22 Blazing Fast PSI 实现介绍

“隐语”是开源的可信隐私计算框架,内置 MPC、TEE、同态等多种密态计算虚拟设备供灵活选择,提供丰富的联邦学习算法和差分隐私机制 开源项目 github.com/secretflow gitee.com/secretflow ​ 11月25日,「隐语开源社区 Meetup西安站」顺利举…

node 版本管理与镜像源

工作中使用node,不同的前端项目可能依赖不同的版本,就需要对node进行版本管理,我们可以使用n来进行node版本的管理,而且n也可以用于安装指定版本的node。 在安装n之前,我们先来确定一下我们的npm是否配置有国内镜像源…

当 Sealos 遇上区块链

当 Sealos 遇上区块链 拿着区块链技术不一定是去发币,很多业务系统也适合用这些技术,比如做个统一支付系统,积分系统等,可以做为一家公司的金融基础设施,或支付中台。拿链的技术去做有很多好处: 高可用&a…

linux(5):linux基础命令第五弹

在linux基础命令第四弹中http://t.csdnimg.cn/tvuNl我们了解了echo、tail命令、管道符和vim文本编辑器的相关内容。这一篇我们会了解关于命令选项的说明 我们在之前的学习中,发现命令中的选项是非常多的,比如-l -c -m -r -w 等等,命令有很多&…

BH1750光照传感器——STM32驱动

———————实验效果——————— 🎄硬件外观 🎄 接线 🎈 VCC接 3.3V 🎈 GND接 GND 🎈 SCL接 PB2 🎈 SDA接PB3 🎈 ADDR 悬空不接 🎄 代码获取 🎈 查看下方 —…

『App自动化测试之Appium基础篇』| Desired Capabilities详解与使用

App自动化测试之Appium基础篇』| Desired Capabilities详解与使用 1 关于appium driver2 安装appium driver3 安装Appium Python Client4 安装测试对象5 获取测试对象信息5.1 使用dumpsys5.2 使用AndroidKiller5.3 使用aapt 6 Capabilities详解6.1 Capabilities介绍6.2 automat…

【VTK】VTK中的光标样式

很高兴在雪易的CSDN遇见你 前言 本文分享VTK中的光标设置相关内容技术,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U&#…

DNSLog漏洞探测(六)之SSRF漏洞实战

DNSLog漏洞探测(六)之SSRF漏洞实战 本文我们来学习如何利用DNSLog平台探测目标网站是否存在SSRF漏洞,接下来我们还是利用Pikachu的靶场作为演示。首先我们先进入Pikachu靶场的SSRF漏洞界面。SSRF漏洞更多的可以称之为服务端的请求伪造。 像是原本探测漏洞的手段&am…

契约锁电子签章让合同起草、审查不再难

起草、审查合同是签约过程中最繁琐的环节之一。 小到筛选合同范本、确认并填写签署方信息、计算工资、服务费用或产品价格,大到合同条款审查、修改…总之想要呈现一份合规、双方满意的合同文书常常消耗大量时间和精力,事倍功半。 销售刚刚和客户确认订单…

二百一十四、Linux——Linux系统时间比电脑时间慢5分钟

一、目的 服务器重启后,发现Linux的系统时间比电脑时间慢5分钟,于是看了些博客,终于找到了解决方法,记录一下,以防止后面出现同样的问题 二、问题 通过date查看,Linux系统时间比电脑时间慢5分钟 &#…