当前位置: 首页 > 后端技术 > PHP

电商系统设计的产品(上)

时间:2023-03-29 20:57:14 PHP

电商人每天都在用,比如某只猫,某只狗等等,电商系统的设计看似复杂其实很简单,看似简单其实很复杂一个高性能的商品系统并不是一件简单的事情。我的设计是在观察了互联网巨头的设计后,根据自己的研究得出的。不完全正确,但也不完全错误。现在我设计的电子商务系统已经投入使用,如果大家在逻辑上遇到什么问题,请及时修改我的电子商务系统文章中的设计思维部分。元素如上图所示。本次先来说明系统规范与自定义规范、系统属性与自定义属性的关系,以及它们存在的意义。SPUSPU(StandardProductUnit)什么是标准化产品单元?放弃标准化、产品单元这个术语?就是以一个产品为单位。比如你是卖笔记本的,厂家进货的时候说要100个型号的iphonex,规格随机,你进货的时候没有考虑内存和屏幕大小。这时候你就把产品iphonex当成了一个单位。这是产品单位。再说标准化,就是这样一个人或一个人制定的标准,所以叫标准化产品单元。不要用百度百科上的解释来反驳我。我只是用一种更容易理解的方式来解释SPU。比如iphonex的价格也不一样,iphonex64g是8888,iphonex256g是18888。这时候我们不能创建2个SPU来管理这2个产品。这时候就需要用到spu的概念。SKUSKU(StockKeepingUnit)什么是库存单位?从字面上理解,库存是指某种产品的某种规格还剩多少件。这时,它不能只针对产品。在上面的例子中,iphonex有2款不同规格的产品。这个时候不可能统计每个规格的库存(创建2个产品不切实际,以后管理会很复杂,比如安踏的跑鞋就有十几个尺码,可以吗?想创建十几个产品?),此时只能为当前产品创建子产品,我们称之为规格,例如iphonex有存储和颜色两个规格,你找到了吗还是有问题吗?具体存储大小和具体颜色如何表达?这时候就需要创建一个规格的子产品。我们称之为属性。每个属性的组合就是一个新产品。我们称之为SKU。一个SPU对应N个SKU,所以生成N个产品iphonex64Gwhiteiphonex32Gblackiphonex256Gwhite等等...systemspecification/property为什么要设置systemspecificationproperty?淘宝盗图,以上规格和属性是按照分类品牌设置的,主要是为了方便商家添加商品,统一管理商品的规格和属性。当然,电子商务系统处于运营初期。尽量少用系统属性规范(方便商户打卡)。自定义属性就不用说了。不让商家自己加规格尺寸怎么行?数据具体数据表的设计如下productproducttable(sputable)CREATETABLE`product`(`id`int(10)unsignedNOTNULLAUTO_INCREMENT,`name`varchar(255)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'producttitle',`category_id`int(11)NOTNULLCOMMENT'商品分类号',`mer_id`int(11)NOTNULLCOMMENT'商户号',`freight_id`int(11)DEFAULTNULL,`type_id`tinyint(4)NOTNULLCOMMENT'typenumber',`sketch`varchar(255)COLLATEutf8mb4_unicode_ciDEFAULTNULLCOMMENT'briefdescription',`intro`textCOLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'commoditydescription',`keywords`varchar(255)COLLATEutf8mb4_unicode_ciDEFAULTNULL'COMMENTkeywords',`tags`varchar(255)COLLATEutf8mb4_unicode_ciDEFAULTNULLCOMMENT'tags',`marque`varchar(255)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'产品型号',`barcode`varchar(255)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'仓库条码',`brand_id`int(11)NOTNULLCOMMENT'brandnumber',`virtual`int(11)NOTNULLDEFAULT'0'COMMENT'虚拟购买金额',`price`decimal(8,2)NOTNULLCOMMENT'商品价格',`market_price`decimal(8,2)NOTNULLCOMMENT'市场价格',`integral`int(11)NOTNULLDEFAULT'0'COMMENT'可以抵消点数',`stock`int(11)NOTNULLCOMMENT'stock',`warning_stock`int(11)NOTNULLCOMMENT'stockwarning',`picture_url`varchar(125)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'coverimage',`posters`varchar(125)COLLATEutf8mb4_unicode_ciDEFAULTNULL,`status`tinyint(4)NOTNULLCOMMENT'status-1=>下架,1=>上架,2=>预售,0=>未上架',`state`tinyint(4)NOTNULLDEFAULT'0'COMMENT'AuditStatus-1AuditFailed0Undaudited1AuditSuccessful',`is_package`enum('0','1')COLLATEutf8mb4_unicode_ciNOTNULLDEFAULT'0'COMMENT'是否是apackage',`is_integral`enum('0','1')COLLATEutf8mb4_unicode_ciNOTNULLDEFAULT'0'COMMENT'是否为积分产品',`sort`int(11)NOTNULLDEFAULT'99'COMMENT'sort',`deleted_at`timestampNULLDEFAULTNULL,`created_at`timestampNULLDEFAULTNULL,`updated_at`timestampNULLDEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=24DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci;system_attribute系统表格CREATETABLE`system_attribute`(`id`int(10)unsignedNOTNULLAUTO_INCREMENT,`category_id`int(11)NOTNULLCOMMENT'商品类别编号',`name`varchar(25)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'属性名称',`sort`int(11)NOTNULLDEFAULT'999'COMMENT'排序顺序',PRIMARYKEY(`id`),KEY`product_attribute_category_id_name_index`(`category_id`,`name`))ENGINE=InnoDBAUTO_INCREMENT=8DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci;system_attribute_option系统属性表CREATETABLE`product_attribute_option`(`id`int(10)unsignedNOTNULLAUTO_INCREMENT,`name`varchar(125)COLLATE_unicodeCOMLLATECOMLLATEutf'选项名称',`attr_id`int(11)NOTNULLCOMMENT'属性编码',`sort`int(11)NOTNULLDEFAULT'999'COMMENT'排序',PRIMARYKEY(`id`),KEY`product_attribute_option_name_attr_id_index`(`name`,`attr_id`))ENGINE=InnoDBAUTO_INCREMENT=5DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci;product_attribute_and_option规范属性绑定表CREATETABLE`product_attribute_and_option`(`id`int(10)unsignedNOTNULLAUTO_INCREMENT,`sku_id`int(11)NOTNULLCOMMENT'sku编码',`option_id`int(11)NOTNULLDEFAULT'0'COMMENT'属性选择项编码',`attribute_id`int(11)NOTNULLCOMMENT'属性编码',`sort`int(11)NOTNULLDEFAULT'999'COMMENT'排序',`supplier_option_id`int(11)DEFAULTNULL,PRIMARYKEY(`id`),KEY`product_attribute_and_option_sku_id_option_id_attribute_id_index`(`sku_id`,`option_id`,`attribute_id`))ENGINE=InnoDBAUTO_INCREMENT=6335DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci;product_skuskuTABLECREATE`id`int(10)unsignedNOTNULLAUTO_INCREMENT,`product_id`int(11)NOTNULLCOMMENT'商品编码',`name`varchar(125)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'sku名称',`img`varchar(255)COLLATEutf8mb4_unicode_ciDEFAULTNULLCOMMENT'主图',`price`decimal(8,2)NOTNULLCOMMENT'价格',`stock`int(11)NOTNULLDEFAULT'0'COMMENT'stock',`code`varchar(255)COLLATEutf8mb4_unicode_ciDEFAULTNULLCOMMENT'商品代码',`barcode`varchar(255)COLLATEutf8mb4_unicode_ciDEFAULTNULLCOMMENT'商品条码',`data`varchar(255)ULATEutf8mb4_unicode_ciDELCOMMENT'skustring',PRIMARYKEY(`id`),KEY`product_sku_name_product_id_index`(`name`,`product_id`))ENGINE=InnoDBAUTO_INCREMENT=530DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci;product_attribute自定义规格表CREATET`product_attribute`(`id`int(10)unsignedNOTNULLAUTO_INCREMENT,`product_id`int(11)NOTNULLCOMMENT'产品代码',`name`varchar(125)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'规范名称',`sort`int(11)NOTNULLDEFAULT'999'COMMENT'sort',PRIMARYKEY(`id`),KEY`product_supplier_attribute_name_product_id_index`(`name`,`product_id`))ENGINE=InnoDBAUTO_INCREMENT=40DEFAULTuniciciiCHARSET=utf8mb4COLLATE=ut;致谢其实理解了设计文件就很简单了产品的等级。后续文章主要讲解如何更合理的存储这些数据。如果设计不合理,比如添加商品很简单,修改商品就很复杂。在早期的设计中,我们应该尽量避免这些“陷阱”。感谢您阅读此处。希望我的文章能帮到你。有什么问题可以在评论区留言,我看到会第一时间回复。谢谢