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

发布时间:2023年12月18日

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删除时间

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

文章来源:https://blog.csdn.net/gzmyh/article/details/134950049
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。