电商研发 —— 产品SKU模型和数据库设计
二、产品SKU E-R模型图
图片.png注意图中的的1对1和1对多关系的连线,至于多对多则分解为两个1对多关系进行设计。
本图中没有标识任何的字段,是为了避免该图过大,过早陷入表具体的细节,干扰了对整体设计的把控。
三、产品SKU 数据库设计
图片.png请放大该图查看。
【注】本图是一个主体的参考设计,并不是实际项目的最终使用版本。到实际的项目中,需要根据实际业务增加各类业务字段,
或者如果某些业务没有那么复杂,可以删减一些表。
四、产品SKU 数据库设计说明
1.1.1. EC****_PROD****【产品】
字段:
l 副名称:无促销活动时留空,如果不为空则在前台附加到名称后面。
l 业务键:即产品编码。此编码用于检索产品,但和库存无关。
l 简述:在产品列表显示。
l 详细描述ID:由于是大文本对象,为了保证查询效率,所以放入公共的大文本对象表中,由于该字段的内容只在产品详细页面才需要,所以查询产品集合时,无需关联查询此字段。
l 产品状态:draft=草稿;on_sale=上架;not_on_sale=下架;forbidden=禁售。
状态流图参考如下:
图片.png
如果需要更严格的审核,则在上架和下架状态中,如果对产品信息做了修改,均更新为草稿状态,需要再次审核。看企业业务需要。
l 产品形态
entity=实体产品;mix=产品包;software=软体产品;service=服务
产品包:需要配置产品包构件,即根据实体产品SKU生成产品包SKU。
软件产品:无需管理库存,一般为永远可售。
服务:同软体产品。
(如果企业不对两者进行区分,也可以合并为“虚拟产品”)。
l 销售类型
stock=按库存销售;pre_order=预售;stock_and_back=按库存并缺货销售;always=永远可售
按库存销售:需要管理库存。
预售:在维护产品销售价格时,需要配置预售相关的字段,如最大总可售数量。
按库存并缺货销售:选择此项后,需要对该产品的SKU配置两条销售价格记录,一条是按库存销售,一条是缺货销售。如果只配置按库存销售的销售价格记录,则缺货销售将按该记录处理。
l 上架起始时间和上架结束时间。
可选。在设置为上架状态时设置。如果需要预上架功能,则需要开发一个定时任务,定时扫描本表,当当前时间在上架起始结束时间内,则更改产品状态为“active 上架”。
1.1.2. ** EC_SEO【实体****SEO信息】**
用于维护产品或产品目录实体的SEO信息。因为对于两者的SEO均只在其详细页面使用,所以将其分离出来放在一对一表中设计,方便重用和提高查询效率。
1.1.3. EC****_PROD_SKU****【产品****SKU】
l SKU业务键
一般只供内部管理使用,唯一。对于独立的库存单元。
l 生成方式
auto_unique=自动生成唯一的产品SKU,并不是通过选择SKU选项生成。即该产品只有一个默认的产品SKU。
manual=人工根据SKU选项生成。
l 尺寸长、宽、高三个字段。
供计算体积、运输处理。
l 重量
供物流计费处理。
l 市场价
供显示用。
l 状态
产品SKU的状态相对简单,只有on_sale=上架、not_on_sell=下架两种。
1.1.4. EC_PROD_****MIX_****ITEM【产品包****构件】
l 注意两个外键关联的不同业务意义。
l 构件数量,默认是1.
1.1.5. EC****_PROD_PRICE****【销售价格****】
l 价格类型:sales_price=销售价;whole_price=批发价;pre-price=预售价;back_order=缺货销售价。
l 价格:对应该类型的价格。
l 单一订单最小、最大数量
当价格类型是
n 销售价:这两个参数影响在购物车中该产品的数量,结账时会检查。
n 批发价:表示该批发价在此范围内有效。
n 预售价:表示每张订单至于预购的数量范围,同销售价。
n 缺货销售价:同销售价。
l 最大总可售数量
仅对预售和缺货销售有效。即表示忽略库存的情况下,最大总可售数量。所以要实现这两个业务时,需要统计该产品已经预售或缺货销售的数量。如果考虑到效率,可以使用EC_PROD_SKU_STAT【产品SKU统计】表进行冗余。
l 附加配置
用于对各个价格类型进行个性化业务扩展,看企业业务需要。
l 起始和结束时间
表示该价格设置只在本时间范围内有效。
l 状态
inactive=未激活;actived=激活;expired=过期
图片.png
1.1.6. EC****_PROD_MEDIA****【产品****媒体****】
本表依赖产品和产品SKU两张表,表示该媒体可以直接属于产品(属于公共图),也可以仅属于某个产品SKU(即在切换为该产品SKU时才会显示该媒体)
l 是否主图:对于产品或产品SKU,当存在多张图时,需要指定其中一张图为主图。
l 媒体类型:方便程序做处理。
l 媒体链接:媒体存放位置。
1.1.7. EC****_PROD_STAT****【产品****统计】
本表是针对产品的一些常见的业务统计数据进行冗余,方便显示。客户需要在相应的业务中更新此表的相关数据。或通过事件监听器、定期任务等异步处理方式进行更新。
1.1.8. ** EC_PROD_SKU_STAT****【产品****SKU统计】**
本表设计原理产品统计表,但业务是针对产品SKU的。目前设计了两个字段,用于冗余统计已预售和缺货销售数量。
1.1.9. EC_SKU_SPEC 【SKU****规格】
SKU规格的定义相对简单。目前没有设计了SKU规格分组,如果网站涉及SKU规格很多种,可以增加一个分组表,这比较简单,就由客户自行完成了。
1.1.10. EC_SKU_SPEC_OP****【规格****选项】
由于只需要关联即可,所以选项无需支持复杂的数据类型(如浮点、大文本之类)。但为了留有扩展余地,我设计了一个“选项值”字段供使用。
1.1.11. EC****_SPEC_OP_INTER****【规格****选项相互作用】
l 作用类型
together=共存;exclude=排除。
共存,表示选项A出现时,可以有选项B,反之也是。
排除:表示选项A出现时,不能有选项B,反之也是。
这个表分为两部分的业务:
- SKU规格选项公共的互作用约束。
即和产品、产品SKU无关,默认的设置。
- 产品个性的约束(此时产品ID值不为空)
注意此约束是无需在界面设置的,而是根据设定产品SKU时,所选择的规格选项自动生成,所以针对此类业务作用类型只有“共存”。对于这类业务是为了方便查询,也可以不做保存。
1.1.12. EC****_PROD_CATE****产品****分类关联
产品和产品目录建立多对多关联。
l 是否主目录
当关联了多个目录时,其中一个目录是主目录。
1.1.13. EC****_PROD_SUPPLIER****【产品****供应商关联】
产品和供应商建立多对多关联。