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

5.后台商品模块

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

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

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

5.1SPU和SKU

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

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

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

thinkphp商城系统之商品模块表设计_第1张图片

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

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

如图

thinkphp商城系统之商品模块表设计_第2张图片

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

5.2表设计

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

5.2.1品牌表

字段 类型 备注
id int(10) unsigned 主键(PRIMARY)
brand_name varchar(30) 品牌名称
brand_image varchar(255) 品牌图片
sort int(11) 排序
remark varchar(255) 品牌介绍
is_show tinyint(1) 是否显示:1-是.0-否
creator int(11) 创建者
updator int(11) 更新者
create_time datetime 创建时间
update_time datetime 更新时间
delete_time datetime 删除时间

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

5.2.2分类表

字段 类型 备注
id int(10) unsigned 主键(PRIMARY)
pid int(11) 父级id
category_name varchar(30) 分类名称
image varchar(255) 分类图片
remark varchar(255) 分类描述
level tinyint(1) 等级
sort int(11) 排序
is_show tinyint(1) 是否显示:1-是;0-否
is_recommend tinyint(1) 是否首页推荐:1-是;0-否
creator int(11) 创建者
updator int(11) 更新者
create_time datetime 创建时间
update_time datetime 更新时间
delete_time datetime 删除时间

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

5.2.3规格表

字段 类型 备注
id int(10) unsigned 主键(PRIMARY)
cate_id int(11) 最后一级商品分类ID
spec_name varchar(30) 规格名称
sort tinyint(4) 排序
is_advanced tinyint(1) 高级选项:0-否, 1-是
is_show tinyint(1) 显示:0-否,1-是
creator int(11) 创建者
updator int(11) 更新者
create_time datetime 创建时间
update_time datetime 更新时间
delete_time datetime 删除时间

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

5.2.4规格属性值表

字段 类型 备注
id int(10) unsigned 主键(PRIMARY)
spec_id int(11) 规格ID
spec_value varchar(30) 规格属性值
sort tinyint(4) 排序
is_show tinyint(1) 是否显示:1-是,0-否
creator int(11) 创建者
updator int(11) 更新者
create_time datetime 创建时间
update_time datetime 更新时间
delete_time datetime 删除时间

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

5.2.5商品表

字段 类型 备注
id int(10) unsigned 主键(PRIMARY)
goods_name varchar(150) 商品名称
goods_spu bigint(20) 商品SPU
one_cate_id int(11) 一级分类
two_cate_id int(11) 二级分类
three_cate_id int(11) 三级分类
four_cate_id int(11) 四级分类
brand_id int(11) 品牌
supplier_id int(11) 供应商
image varchar(255) 商品主图
remark varchar(255) 商品简介
content text 商品详细描述
status tinyint(1) 商品状态:-1-回收站;0-下架;1-上架
sort int(11) 排序
sales_sum int(11) 商品销量
comment_sum int(11) 评论数量
click_sum int(11) 点击数量
price decimal(10,2) 商品价格
discount_factor decimal(10,2) 折扣系数
freight_type tinyint(1) 运费类型:1-包邮;2-统一运费;3-运费模板
freight_price decimal(10,2) 统一运费金额
freight_template_id int(11) 运费模板
is_new tinyint(1) 新品推荐:1-是;0-否
is_hot tinyint(1) 热点产品:1-是;0-否
is_team tinyint(1) 开启拼团:1-是;0-否
creator int(11) 创建者
updator int(11) 更新者
create_time datetime 创建时间
update_time datetime 更新时间
delete_time datetime 删除时间

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

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

5.2.6评论表

字段 类型 备注
id int(11) 主键(PRIMARY)
goods_id int(11) 商品ID
goods_item_id int(11) 某种规格商品ID
order_goods_id int(11) 订单商品表id
user_id int(11) 用户ID
goods_star tinyint(1) 商品评论星级:1-5星
service_star tinyint(1) 服务评论星级:1-5星
express_star tinyint(1) 物流评论星级:1-5星
comment varchar(255) 商品评论
reply varchar(255) 商家回复
status tinyint(1) 显示状态 0-隐藏 1-显示
create_time datetime 创建时间
update_time datetime 更新时间
delete_time datetime 删除时间

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

5.2.7评论的图片/视频表

字段 类型 备注
id int(10) unsigned 主键(PRIMARY)
type tinyint(1) 文件类型:1-图片,2-视频
goods_comment_id int(11) 商品评价id
url varchar(255) 文件链接l
create_time datetime 创建时间
update_time datetime 更新时间
delete_time datetime 删除时间

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

5.2.8商品拥有的规格属性表

字段 类型 备注
id int(10) unsigned 主键(PRIMARY)
goods_id int(11) 商品ID
spec_id int(11) 规格ID
spec_value_id int(11) 规格属性ID
create_time datetime 创建时间
update_time datetime 更新时间
delete_time datetime 删除时间

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

5.2.9商品SKU表

字段 类型 备注
id int(10) unsigned 主键(PRIMARY)
goods_id int(11) 商品ID
title varchar(100) 标题
sku bigint(20) 商品SKU
spec_ids varchar(200) 多个规格id,隔开
spec_value_ids varchar(200) 多个规格属性值ID,隔开
market_price decimal(10,2) 市场价
price decimal(10,2) 价格
cost_price decimal(10,2) 成本价
stock int(10) 库存
bar_code varchar(200) 条码
creator int(11) 创建者
updator int(11) 更新者
create_time datetime 创建时间
update_time datetime 更新时间
delete_time datetime 删除时间

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

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

5.2.10 商品SKU主图

字段 类型 备注
id int(10) unsigned 主键(PRIMARY)
type tinyint(1) 文件类型:1-图片,2-视频
sku bigint(20) 商品评价id
url varchar(255) 文件链接
create_time datetime 创建时间
update_time datetime 更新时间
delete_time datetime 删除时间

详情里面的轮播图

5.2.11商品点击表

字段 类型 备注
id int(10) unsigned 主键(PRIMARY)
user_id int(11) 用户ID
goods_id int(11) 商品ID
creator int(11) 创建者
updator int(11) 更新者
create_time datetime 创建时间
update_time datetime 更新时间
delete_time datetime 删除时间

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

5.2.12 商品收藏表

字段 类型 为空 额外 默认 整理 备注
id int(10) unsigned PK auto_increment 主键(PRIMARY)
user_id int(11) YES 0 用户ID
goods_id int(11) YES 0 商品ID
create_time datetime YES 创建时间
update_time datetime YES 更新时间
delete_time datetime YES 删除时间

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

你可能感兴趣的:(thinkphp,php,thinkphp,mysql)