这两天公司要做一个商城项目,网上搜了很多没找到完整的、有结构体系的资料,可能这件事本身并不难,但是对新手非常不友好,所以我借机把这些碎片化的资料尝试整理成一个有体系的资料,希望能对你有帮助。资料来源包括:
数据库设计
先亮出我最终的workbench设计稿:
其实不复杂,也只是完成了最基本的功能——卖商品。
下面详细说下我设计过程中的思路和知识点。
商品相关
SKU和SPU
SPU全称Standard Product Unit,最小包装单元;SKU全称Stock Keeping Unit,最小主要单元。比如坚果R1是SPU,而坚果R1 64G 细红线版可以称为一个SKU,SKU也可以看做最小销售单元。我对此的理解是SKU=SPU+规格。SKU和SPU是一对多关系,SPU和规格是一对一关系。
规格
规格是细化SPU为SKU的标准。比如颜色、内存等。规格可以用于筛选商品,比如下图中京东对手机的筛选条件,这些都是规格,跟规格类似的有个概念叫属性。
属性
商品属性,也可以叫商品详情。主要用于展示和介绍商品。和规格有一定重合性,比如重量,颜色等。但他俩最大的区别,规格用于筛选,属性用于展示。我把规则设计成表,把属性设计成MySQL的text字段,用json存储。一个SKU可以用多个属性和多个规格。
规格值
当时这里没搞懂,就多写了点。
规格表中存的是像颜色、内存这些,而规格值表中存的是黑色、32G。更具体的说,规格表中的数据类似于规格名称、规格id、规格顺序、规格录入方式(比如内存通常有规定的选项;而颜色不好穷尽,通常让人手动加)、检索方式(例如不检索、关键字、范围检索等);而规格值表通常就规格表id和规格值。规格表和规格值表是一对多关系,而规格表和SKU是多对多关系。
品牌
规格的图中,我没有把品牌划到红框内,因为品牌不存在规格表中,但品牌可以看做一种特殊的规格,它是一个筛选条件,品牌相比普通规格,拥有更多属性同时也更复杂,比如品牌名称、logo、故事等;品牌还可以和SKU关联。所以我把品牌单独设计成表。品牌和SKU是一对多关系。
商品分类
商品分类和商品类型也是两个容易混淆的概念。商品分类的目的是为了人们方便挑选;而商品类型≈商品规格,目的精细筛选。两者都是选择条件,区分点在于分类是模糊和精准。下图就是商品分类,商品类型可以参考上面的规格图。我把商品分类设计成一张单独的表,商品分类表和SKU是一对多关系。从数据库层面讲,商品分类是在商品分类表中选SKU,而商品类型是在众多SKU中根据规格筛选。
经销商店铺
就像京东上不仅有自营,还有第三方店铺的商品。不管是自营还是经销商店铺,本质都是店铺。店铺只用跟SPU关联即可。所以我建了一张店铺表,店铺和SPU是一对多关系。
库存相关
库存表
每个SPU都有对应的库存,所以SPU和库存表是一对一关系。
订单相关
订单
就像开头说的,前期的核心是卖商品,所以订单这块不涉及活动。订单表中只包含订单相关的属性,比如订单状态、订单金额等,订单表和SPU是一对多关系。
购物车相关
购物车
同理,购物车表和SPU也是一对多关系。
数据库设计总结
商城可以设计的很复杂,还可以增加活动、秒杀、推广、物流、运维、发票、支付等等等等,但前期项目刚建立的核心只有一个——卖商品。后面这些东西我会再慢慢增加,即将增加的是很重要的项目架构设计。欢迎收藏,我会及时更新。也欢迎评论,毕竟这些东西只看了一晚上就写下了,可能有些不对的地方,还望赐教。
欢迎关注微信公众号,提供思想和技术类原创文章。微信搜索小兵张健或扫描以下二维码。