Lei Zhang

时光已逝永不回,
往事只能回味。
... ...
春风又吹红了花蕊,
你已经也添了新岁。

▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 96%



3Years-4 商品模型

2018-04-10 » 没填完的坑 / 3Years , Tutorial , 微信开发

项目地址:https://github.com/PassionZale/3Years


相对整个商城而言,商品模型是一个非常重要的模型。

对一件商品而言,与之相关的会有:分类、商品基本信息(图片、价格、库存、规格、简介、详情等等)。

在一些大型的 B2C 平台,关于分类,还会有“品牌”的概念,譬如 “联想”品牌中,会有“电脑”、“家电”等分类。

接下来,我们开始设计商品模型


3Years-2 用户模型中设计用户模型类似,我们也为商品模型相关表定义表前缀:product

当开始设计数据展示相关模型时,一个非常重要的概念便是:排序,健壮的平台,会根据你的浏览、购买习惯将某些类似的商品或者分类推荐给你。当然本教程还做不出那么厉害的“推荐系统”(暂时用一个字段手动来定义排序),但是你必须 GET 到这个点!

在后面的表结构设计前,你可以先了解一下:商品多规格多属性模型设计思路


(商品分类表)product_categories

这里,分类表可以设计为“一级分类”、“二级分类”、“无限级分类”,这里我们不弄那么复杂,只是设计为“二级分类”。


(商品规格表)product_attributes

(商品属性表)product_items

这两张表,通常用来组合显示某个商品的不同规格,不同属性之后对应的价格及库存:


分类、规格、属性、商品,这4者的包含关系如下图所示(手绘的有点丑),对应该图,更通俗的说法就是:

1. 分类在最顶层,所有商品相关的其他模型均为它的子集,它对所有表而言都是 ONE-TO-MANY 关系;

2. 规格总是跟着分类走,例如:“手机分类”有“颜色”、“内存”等规格;

3. 规格-属性,就好比 key-value 键值对,例如:“颜色规格”有“红”、“黄”、“蓝”三种属性;

4. 我们通常看到的,如“iPhone8”,它便是一个 SPU:标准化产品单元(货品),而我们实际购买到的“黑色64GiPhone8”便是一个 SKU:库存量单位(商品),后面再设计这一块表结构的时候会详细说明。


根据上述,商品分类表与商品规格表, ONE-TO-MANY 关系:


商品规格表与商品属性表,ONE-TO-MANY 关系:


(商品表)product_products

这张表所记录的数据,便是 SPU。在商品详情页中,展示出来的公共数据便是在该表中,诸如:商品的图片、详情介绍、名称等等。

1. status:用来标识商品的上下架状态;

2. img:通常在商品列表页,用来展示的商品图片;

3. original_price(原价),current_price(现价),通常用来做一个折扣效果,让用户感觉这个商品降价了,赶紧买... ...


在商品详情页面中,商品还会有一个轮播图,用大概 1-4 张图片来展示商品各个角度的外观,我们将这块数据单独存在另外一个表中,product_products_banners


(SKU表)product_skus

这个表,才是用户真正购买到的商品,在 products 表中的价格字段,通常是在用户没有选择规格属性组合时默认显示的价格数据,而用户实际付款的价格,便是根据 product_skus 表查询而得。

根据 skus.code 便可以查到该 sku 全部的数据:包括当前规格组合、组合下的价格库存、关联的 product 数据等等。


现在已经建立好了 categories(分类)、attributes(规格)、items(属性)、products(货品)、skus(商品),并且标识他们之间 ONE-TO-MANY 的关系,剩下的,我们还需要完善 attributes -- items -- products 以及 items -- skus 之间的 MANY-TO-MANY 关系。

product_products_attributes


product_products_items


products_attributes & products_items 这两张表用来做什么?

进入商品详情页后,服务端在知道 product_id 后,即可通过 product_id 及这两张关联表,查询出该商品所关联的全部规格及属性,并将其返回至客户端,渲染至页面,类似这样:


product_skus_items

通过这张表,我们能将全部的组合,如上图,遍会有 18 种组合选择方式,我们便可通过这张表,查询所有的组合方式,以及该组合方式所对应的价格、库存等。

当用户选择“银”+“WIFI128G”+“普通版”时,便可根据组合方式,查询出当前组合所对应的价格等信息,动态的显示不同规格组合下的价格及库存了。


我们的数据库中,已经有了用户模型粉丝模型商品模型。现在数据库大概长这样:

仍然还有一些模型,如订单模型,商城配置模型、公众号模型等还未完善,不过现在的这 3 个模型,已经足够来进行管理后台微信接入等开发了!

下一篇将开始编写服务端 JWT 认证及 商品模型 的增删改查... ...enlightened

#1 匿名评论 2 月 之前
product_skus_items 表是不是少了 attribute_id 字段啊?
另外这个表是不是冗余的?“通过这张表,查询所有的组合方式,以及该组合方式所对应的价格、库存等。”---这个怎么查? group by
item_id,attribute_id?
展开选填信息