电商系统商品数据表设计分析与总结

小天天天天    PHP    999+ 次    2021-07-12 16:36:26


本文针对电商系统中的商品管理模块进行分析,总结出如何设计一个合理的商品管理表。分析的角度,重点放在商品的规格设计上,针对单一规格、多规格和组合规格情况进行如何设计表的总结。

前期分析

对于商品功能,我这里总结了至少需要下面这几张表。



表名 表作用 常用字段

category 商品分类表,存储商品分类信息 一般有数据 id,分类名称

goods 商品信息表,存储商品的基础信息 一般有数据 id,商品名称,商品封面 (外键图片表 id),小标题,显示基础价格,销售量,商品状态,商品排序等

goods_category 商品分类关联,存储商品与商品分类的关联关系,存储商品与分类一对多的情况 有商品 id,分类的 id

image 图片表,存储系统的图片信息 一般有数据 id,图片地址,图片名称,图片大小

goods_image 商品图片关联,存储商品与图片的关联关系,存储商品与图片一对多的情况 有商品 id,图片 id

spec 商品规格组表,存储商品的规格组,例如颜色、重量、材质等分组信息 一般有数据 id,组名称

spec_value 商品规格组值表,存储商品的规格组值,一个规格组,有多个规格值,则存储多条数据。如规格组里面有颜色,则颜色对应下面有红色、黄色、蓝色等颜色信息 一般有数据 id,规格组 id,规格组对应值

goods_spec 商品规格值表,存储商品的信息与规格组值得信息,一般都是一对多的关系,则一个关联关系一行数据 有商品 id,规格组值 id,库存,销量,编码,重量等信息

单一个规格设计

什么是单一规格,所谓的单一规格就是默认只有一种规格。当用户选择商品下单时,不需要去选择什么规格,直接默认一种商品属性。例如下面的截图示例:

aRJsLe8yI9 (1).png

对应的逻辑关系如下图:

AswcEE5Bwi.png

管理端截图:

tQLdy66KpK.png

多种规格设计

什么是多种规格,多种规格就是指不包含一种规格,例如一个商品中有颜色、重量、大小等等规格,这种不同的规格又有不同的值。

多种规格的表该如何设计呢?其实和上面的逻辑关系是一样的,无非就是一种规格多种值时,添加多条记录而已。


表设计总结

商品记录表#

CREATE TABLE goods (
  goods_id int(11) UNSIGNED NOT NULL COMMENT '商品id',
  goods_name varchar(255) NOT NULL DEFAULT '' COMMENT '商品名称',
  selling_point varchar(500) NOT NULL DEFAULT '' COMMENT '商品卖点',
  category_id int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '商品分类id',
  deduct_stock_type tinyint(3) UNSIGNED NOT NULL DEFAULT '20' COMMENT '库存计算方式(10下单减库存 20付款减库存)',
  content longtext NOT NULL COMMENT '商品详情',
  sales_initial int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '初始销量',
  sales_actual int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '实际销量',
  goods_sort int(11) UNSIGNED NOT NULL DEFAULT '100' COMMENT '商品排序(数字越小越靠前)',
  goods_status tinyint(3) UNSIGNED NOT NULL DEFAULT '10' COMMENT '商品状态(10上架 20下架)',
  is_delete tinyint(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT '是否删除',
  create_time int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '创建时间',
  update_time int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品记录表';

商品分类表#

CREATE TABLE `category` (
  `category_id` int(11) UNSIGNED NOT NULL COMMENT '商品分类id',
  `name` varchar(50) NOT NULL DEFAULT '' COMMENT '分类名称',
  `parent_id` int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '上级分类id',
  `image_id` int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '分类图片id',
  `sort` int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '排序方式(数字越小越靠前)',
  `create_time` int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '创建时间',
  `update_time` int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品分类表';

商品分类关联表#

CREATE TABLE `category` (
  `category_id` int(11) UNSIGNED NOT NULL COMMENT '商品分类id',
  `goods_id` int(11) NOT NULL DEFAULT 0 COMMENT '商品id',
  `create_time` int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '创建时间',
  `update_time` int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品分类关联表';

图片表#

CREATE TABLE upload_file (
  file_id int(11) UNSIGNED NOT NULL COMMENT '文件id',
  storage varchar(20) NOT NULL DEFAULT '' COMMENT '存储方式',
  file_url varchar(255) NOT NULL DEFAULT '' COMMENT '存储域名',
  file_name varchar(255) NOT NULL DEFAULT '' COMMENT '文件路径',
  file_size int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '文件大小(字节)',
  file_type varchar(20) NOT NULL DEFAULT '' COMMENT '文件类型',
  extension varchar(20) NOT NULL DEFAULT '' COMMENT '文件扩展名',
  is_user int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '是否为c端用户上传',
  is_recycle tinyint(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT '是否已回收',
  is_delete tinyint(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT '软删除',
  create_time int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '创建时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='图片记录表';

商品图片表#

CREATE TABLE goods_image (
  id int(11) UNSIGNED NOT NULL COMMENT '主键id',
  goods_id int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '商品id',
  image_id int(11) NOT NULL COMMENT '图片id(关联图片记录表)',
  create_time int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '创建时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品图片记录表';

规格组表#

CREATE TABLE spec (
  spec_id int(11) UNSIGNED NOT NULL COMMENT '规格组id',
  spec_name varchar(255) NOT NULL DEFAULT '' COMMENT '规格组名称',
  create_time int(11) NOT NULL COMMENT '创建时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品规格组记录表';

规格组值表#

CREATE TABLE spec_value (
  spec_value_id int(11) UNSIGNED NOT NULL COMMENT '规格值id',
  spec_value varchar(255) NOT NULL COMMENT '规格值',
  spec_id int(11) NOT NULL COMMENT '规格组id',
  create_time int(11) NOT NULL COMMENT '创建时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品规格值记录表';


商品规格值关联表#

CREATE TABLE goods_sku (
  goods_sku_id int(11) UNSIGNED NOT NULL COMMENT '商品规格id',
  goods_id int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '商品id',
  spec_sku_id varchar(255) NOT NULL DEFAULT '0' COMMENT '商品sku记录索引 (由规格id组成)',
  image_id int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '图片id',
  goods_no varchar(100) NOT NULL DEFAULT '' COMMENT '商品编码',
  goods_price decimal(10,2) UNSIGNED NOT NULL DEFAULT '0.00' COMMENT '商品价格',
  line_price decimal(10,2) UNSIGNED NOT NULL DEFAULT '0.00' COMMENT '商品划线价',
  stock_num int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '当前库存数量',
  goods_sales int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '商品销量',
  goods_weight double UNSIGNED NOT NULL DEFAULT '0' COMMENT '商品重量(Kg)',
  create_time int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '创建时间',
  update_time int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品规格表';

如果你觉得本篇文章对您有帮助,请打赏作者

上一篇: Nginx统计访问IP并排序

下一篇: js+drag实现拖动排序

最新评论

暂无评论

热门文章

最新评论

网站数据

网站文章数:481

今日UV/PV/IP:13/15/13

昨日UV/PV/IP:33/37 /33

TOP