商品规格分析
首先,什么是商品规格,在一些电商的网站上队以某一商品的详细描述,包括具体的规格参数等,这些内容能够准确的描述商品,同时也能够让消费者通过了解这些内容来做决策,判断对于此商品是否要购买,也就是说这个功能较为普遍,同时也很有用。参考下面图片中的商品的描述:
通过查看相似的页面可以发现,其又出些项目是相同的,不同的只是商品的具体的不同的值。同时,对于同一类商品,其主要的规格项目名称是相同的,只不过具体的详细项目类别不同,那么我们需要实现这个功能,如何去实现呢?
首先分析,分析了一下两种方案,并进行了比较和实际工程的使用:
方案一、简历数据库对应的表来实现
这个是我们最直接能够想到的方式,那我们开始详细的分析一下整个的表的创建即组织:
1.每一类商品包含有多个分组;具体的可以体现为下面的关系(假设商品的分组表为:tb_item_param_group):
2.通过上面对网页上的商品描述举行分析,可以发现,每个分组下面都有很多的项:
3.同时,每个商品拥有不同的参数,所以,关系就变为下图了:
表格具体设计如下:
表一:规格组信息
列名 | 类型 | 长度 | 可以null | 键 | 说明 |
Id | Int |
| 否 | P | 主键(自增长) |
group_name | varchar | 20 | 否 |
| 规格分组名称 |
item_cat_id | Int |
| 否 | F | 商品分类id(外键) |
表二:规格项信息
列名 | 类型 | 长度 | 可以null | 键 | 说明 |
Id | Int |
| 否 | P | 主键(自增长) |
param_name | varchar | 20 | 否 |
| 规格项目名称 |
group_id | Int |
| 否 | F | 规格分组id(外键) |
表三:商品规格信息
列名 | 类型 | 长度 | 可以null | 键 | 说明 |
item_id | Int |
| 否 | P | 商品id(联合主键) |
param_id | varchar |
| 否 | P | 规格项id(联合主键) |
param_value | varchar | 500 | 否 |
| 规格信息 |
分析后可以看出,表的数量比较多,同时,表格之间的关系也比较复杂,如果遇到后期的维护,这将是很困难的,同时如果需求修改,表中的内容也变动时,这个将会更加的难以维护,那么有没有好的解决方案呢?在这里我们使用模板方法来解决这种问题。
那么它究竟有哪些问题让我们想要寻求新的发难来解决这个问题呢?
1、需要创建多张表来描述规格参数之间的关系。
2、查询时需要复杂的sql语句查询。
3、规格参数数据量是商品信息的几十倍,数据量十分庞大。查询时效率很低。
4、如果要求新添加的商品规格项发生改变,之前的商品不变是不能实现的。
方案二、借用模板方式的思路
[
{
"group": "主体", //组名称
"params": [ // 记录规格成员
"品牌",
"型号",
"颜色",
"上市年份",
"上市月份"
]
},
{
"group": "网络", //组名称
"params": [ // 记录规格成员
"4G",
"3G,
"2G"
]
}
]
这里以手机的参数作为例子,进行了演示,可以将前端填写的group以及下面的各种详细的参数储存为一个模板,类似于上面的json数据,这样就可以将其当作模板,供不同的手机种类重复使用。相比之下,会方便很多,而且如果需要改动,我们需要改动模板就可以了。例如下面的使用的例子:
[
{
"group": "主体",
"params": [
{
"k": "品牌",
"v": "苹果(Apple)"
},
{
"k": "型号",
"v": "iPhone 6 A1589"
},
{
"k": "智能机",
"v": "是 "
}
]
}
]
好了已经有了一个大致的印象,我们来通过一个时序图分析一下整个的流程是怎么样的:
1. 首先,在前端界面用户根据需要建立规格模板,这个需要对应具体的类目,这样就实现了不同类目的规格参数的不同的需求的划分,如果检查没有问题后可以添加到数据库中的规格的模板表格。同时前端返回状态消息,添加模板成功。