摘要:在电商系统中,商品规格与销售属性往往是一类较为复杂的数据结构,不仅仅在于数据的查询存储上,还在于数据库中的属性数据的查询、与
Java Bean
的转换等。本文将从属性数据的展示为起点,数据库的设计及实现为终点,详细介绍商品规格与销售属性的相关故事。
1. 商品基本规格与销售属性的概念
商品基本规格属性:指不影响商品实际销售价格的属性,只充当解释说明的一系列属性键值对,增强用户对该商品的认识程度,以增加购买欲望。
商品销售属性:指影响商品实际销售价格的属性,通过不同的销售属性,区分某一个产品的不同配置。例如,针对华为mate40,8G+128G和16G+256G,黑色和白色均为销售属性,不同的内存、不同颜色的商品价格不一样。
2. 基本规格与销售属性的区别
每个分类下的商品共享规格参数的键名(KEY
)与销售属性的键名(KEY
)。但存在商品不一定要用这个分类下的全部属性的键名(KEY
)。
- 属性是以三级分类的形式组织起来
- 规格参数中有些是可以提供检索的
- 规格参数也是基本属性,它们也具有自己的分组
- 属性的分组也是以三级分类组织起来的
- 属性名确定的,但是值是每一个商品不同来决定的
解释说明:键名和属性名均是指CPU,内存等,并非是指商品具体的数值。
3. 数据库的设计
3.1 E-R 图
3.2 数据库详细设计
由于设计实现较为简单,可以作为数据或思考用,谨慎用于生产环境。
3.5 product
数据库DDL
CREATE DATABASE /*!32312 IF NOT EXISTS*/`product` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
USE `product`;
/*Table structure for table `prod_attr` */
DROP TABLE IF EXISTS `prod_attr`;
CREATE TABLE `prod_attr` (
`attr_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '属性id',
`attr_name` char(30) DEFAULT NULL COMMENT '属性名',
`search_type` tinyint(4) DEFAULT NULL COMMENT '是否需要检索[0-不需要,1-需要]',
`icon` varchar(255) DEFAULT NULL COMMENT '属性图标',
`value_select` char(255) DEFAULT NULL COMMENT '可选值列表[用逗号分隔]',
`attr_type` tinyint(4) DEFAULT NULL COMMENT '属性类型[0-销售属性,1-基本属性,2-既是销售属性又是基本属性]',
`enable` bigint(20) DEFAULT NULL COMMENT '启用状态[0 - 禁用,1 - 启用]',
`catelog_id` bigint(20) DEFAULT NULL COMMENT '所属分类',
`show_desc` tinyint(4) DEFAULT NULL COMMENT '快速展示【是否展示在介绍上;0-否 1-是】,在sku中仍然可以调整',
PRIMARY KEY (`attr_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品属性';
/*Table structure for table `prod_attr_attrgroup_relation` */
DROP TABLE IF EXISTS `prod_attr_attrgroup_relation`;
CREATE TABLE `prod_attr_attrgroup_relation` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`attr_id` bigint(20) DEFAULT NULL COMMENT '属性id',
`attr_group_id` bigint(20) DEFAULT NULL COMMENT '属性分组id',
`attr_sort` int(11) DEFAULT NULL COMMENT '属性组内排序',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='属性&属性分组关联';
/*Table structure for table `prod_attr_group` */
DROP TABLE IF EXISTS `prod_attr_group`;
CREATE TABLE `prod_attr_group` (
`attr_group_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '分组id',
`attr_group_name` char(20) DEFAULT NULL COMMENT '组名',
`sort` int(11) DEFAULT NULL COMMENT '排序',
`descript` varchar(255) DEFAULT NULL COMMENT '描述',
`icon` varchar(255) DEFAULT NULL COMMENT '组图标',
`catelog_id` bigint(20) DEFAULT NULL COMMENT '所属分类id',
PRIMARY KEY (`attr_group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='属性分组';
/*Table structure for table `prod_brand` */
DROP TABLE IF EXISTS `prod_brand`;
CREATE TABLE `prod_brand` (
`brand_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '品牌id',
`name` char(50) DEFAULT NULL COMMENT '品牌名',
`logo` varchar(2000) DEFAULT NULL COMMENT '品牌logo地址',
`descript` longtext COMMENT '介绍',
`show_status` tinyint(4) DEFAULT NULL COMMENT '显示状态[0-不显示;1-显示]',
`first_letter` char(1) DEFAULT NULL COMMENT '检索首字母',
`sort` int(11) DEFAULT NULL COMMENT '排序',
PRIMARY KEY (`brand_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COMMENT='品牌';
/*Table structure for table `prod_category` */
DROP TABLE IF EXISTS `prod_category`;
CREATE TABLE `prod_category` (
`cat_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '分类id',
`name` char(50) DEFAULT NULL COMMENT '分类名称',
`parent_cid` bigint(20) DEFAULT NULL COMMENT '父分类id',
`cat_level` int(11) DEFAULT NULL COMMENT '层级',
`show_status` tinyint(4) DEFAULT NULL COMMENT '是否显示[0-不显示,1显示]',
`sort` int(11) DEFAULT NULL COMMENT '排序',
`icon` char(255) DEFAULT NULL COMMENT '图标地址',
`product_unit` char(50) DEFAULT NULL COMMENT '计量单位',
`product_count` int(11) DEFAULT NULL COMMENT '商品数量',
PRIMARY KEY (`cat_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1445 DEFAULT CHARSET=utf8mb4 COMMENT='商品三级分类';
/*Table structure for table `prod_category_brand_relation` */
DROP TABLE IF EXISTS `prod_category_brand_relation`;
CREATE TABLE `prod_category_brand_relation` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`brand_id` bigint(20) DEFAULT NULL COMMENT '品牌id',
`catelog_id` bigint(20) DEFAULT NULL COMMENT '分类id',
`brand_name` varchar(255) DEFAULT NULL,
`catelog_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='品牌分类关联';
/*Table structure for table `prod_comment_replay` */
DROP TABLE IF EXISTS `prod_comment_replay`;
CREATE TABLE `prod_comment_replay` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`comment_id` bigint(20) DEFAULT NULL COMMENT '评论id',
`reply_id` bigint(20) DEFAULT NULL COMMENT '回复id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品评价回复关系';
/*Table structure for table `prod_product_attr_value` */
DROP TABLE IF EXISTS `prod_product_attr_value`;
CREATE TABLE `prod_product_attr_value` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`spu_id` bigint(20) DEFAULT NULL COMMENT '商品id',
`attr_id` bigint(20) DEFAULT NULL COMMENT '属性id',
`attr_name` varchar(200) DEFAULT NULL COMMENT '属性名',
`attr_value` varchar(200) DEFAULT NULL COMMENT '属性值',
`attr_sort` int(11) DEFAULT NULL COMMENT '顺序',
`quick_show` tinyint(4) DEFAULT NULL COMMENT '快速展示【是否展示在介绍上;0-否 1-是】',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='spu属性值';
/*Table structure for table `prod_sku_images` */
DROP TABLE IF EXISTS `prod_sku_images`;
CREATE TABLE `prod_sku_images` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`sku_id` bigint(20) DEFAULT NULL COMMENT 'sku_id',
`img_url` varchar(255) DEFAULT NULL COMMENT '图片地址',
`img_sort` int(11) DEFAULT NULL COMMENT '排序',
`default_img` int(11) DEFAULT NULL COMMENT '默认图[0 - 不是默认图,1 - 是默认图]',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='sku图片';
/*Table structure for table `prod_sku_info` */
DROP TABLE IF EXISTS `prod_sku_info`;
CREATE TABLE `prod_sku_info` (
`sku_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'skuId',
`spu_id` bigint(20) DEFAULT NULL COMMENT 'spuId',
`sku_name` varchar(255) DEFAULT NULL COMMENT 'sku名称',
`sku_desc` varchar(2000) DEFAULT NULL COMMENT 'sku介绍描述',
`catalog_id` bigint(20) DEFAULT NULL COMMENT '所属分类id',
`brand_id` bigint(20) DEFAULT NULL COMMENT '品牌id',
`sku_default_img` varchar(255) DEFAULT NULL COMMENT '默认图片',
`sku_title` varchar(255) DEFAULT NULL COMMENT '标题',
`sku_subtitle` varchar(2000) DEFAULT NULL COMMENT '副标题',
`price` decimal(18,4) DEFAULT NULL COMMENT '价格',
`sale_count` bigint(20) DEFAULT NULL COMMENT '销量',
PRIMARY KEY (`sku_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='sku信息';
/*Table structure for table `prod_sku_sale_attr_value` */
DROP TABLE IF EXISTS `prod_sku_sale_attr_value`;
CREATE TABLE `prod_sku_sale_attr_value` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`sku_id` bigint(20) DEFAULT NULL COMMENT 'sku_id',
`attr_id` bigint(20) DEFAULT NULL COMMENT 'attr_id',
`attr_name` varchar(200) DEFAULT NULL COMMENT '销售属性名',
`attr_value` varchar(200) DEFAULT NULL COMMENT '销售属性值',
`attr_sort` int(11) DEFAULT NULL COMMENT '顺序',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='sku销售属性&值';
/*Table structure for table `prod_spu_comment` */
DROP TABLE IF EXISTS `prod_spu_comment`;
CREATE TABLE `prod_spu_comment` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`sku_id` bigint(20) DEFAULT NULL COMMENT 'sku_id',
`spu_id` bigint(20) DEFAULT NULL COMMENT 'spu_id',
`spu_name` varchar(255) DEFAULT NULL COMMENT '商品名字',
`member_nick_name` varchar(255) DEFAULT NULL COMMENT '会员昵称',
`star` tinyint(1) DEFAULT NULL COMMENT '星级',
`member_ip` varchar(64) DEFAULT NULL COMMENT '会员ip',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`show_status` tinyint(1) DEFAULT NULL COMMENT '显示状态[0-不显示,1-显示]',
`spu_attributes` varchar(255) DEFAULT NULL COMMENT '购买时属性组合',
`likes_count` int(11) DEFAULT NULL COMMENT '点赞数',
`reply_count` int(11) DEFAULT NULL COMMENT '回复数',
`resources` varchar(1000) DEFAULT NULL COMMENT '评论图片/视频[json数据;[{type:文件类型,url:资源路径}]]',
`content` text COMMENT '内容',
`member_icon` varchar(255) DEFAULT NULL COMMENT '用户头像',
`comment_type` tinyint(4) DEFAULT NULL COMMENT '评论类型[0 - 对商品的直接评论,1 - 对评论的回复]',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品评价';
/*Table structure for table `prod_spu_images` */
DROP TABLE IF EXISTS `prod_spu_images`;
CREATE TABLE `prod_spu_images` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`spu_id` bigint(20) DEFAULT NULL COMMENT 'spu_id',
`img_name` varchar(200) DEFAULT NULL COMMENT '图片名',
`img_url` varchar(255) DEFAULT NULL COMMENT '图片地址',
`img_sort` int(11) DEFAULT NULL COMMENT '顺序',
`default_img` tinyint(4) DEFAULT NULL COMMENT '是否默认图',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='spu图片';
/*Table structure for table `prod_spu_info` */
DROP TABLE IF EXISTS `prod_spu_info`;
CREATE TABLE `prod_spu_info` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '商品id',
`spu_name` varchar(200) DEFAULT NULL COMMENT '商品名称',
`spu_description` varchar(1000) DEFAULT NULL COMMENT '商品描述',
`catalog_id` bigint(20) DEFAULT NULL COMMENT '所属分类id',
`brand_id` bigint(20) DEFAULT NULL COMMENT '品牌id',
`weight` decimal(18,4) DEFAULT NULL,
`publish_status` tinyint(4) DEFAULT NULL COMMENT '上架状态[0 - 下架,1 - 上架]',
`create_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='spu信息';
/*Table structure for table `prod_spu_info_desc` */
DROP TABLE IF EXISTS `prod_spu_info_desc`;
CREATE TABLE `prod_spu_info_desc` (
`spu_id` bigint(20) NOT NULL COMMENT '商品id',
`decript` longtext COMMENT '商品介绍',
PRIMARY KEY (`spu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='spu信息介绍';