商品规格
- 商品规格包括规格组合、规格项,规格项为规格组的成员。
规格组
|-规格项:规格值
|-规格项:规格值
规格组
|-规格项:规格值
|-规格项:规格值
- 同一类商品的规格相同。
方案一
- 使用多个表存储商品规格。在已有的商品分类表和商品表的基础上,增加商品规格分组表、商品规格项表、商品规格值表。
表设计
商品表:tb_item
列名 类型 键 说明 item_id bigint P 商品id cat_id bigint F 商品分类id 商品分类表:tb_item_cat
列名 类型 键 说明 cat_id bigint P 商品分类id 商品规格组表:tb_item_param_group
列名 类型 键 说明 group_id bigint P 商品规格组id group_name varchar 商品规格组名称 cat_id bigint F 商品分类id 商品规格项表:tb_item_param_key
列名 类型 键 说明 key_id bigint P 商品规格项id key_name varchar 商品规格项名称 group_id bigint F 商品规格组id 商品规格值表:tb_item_param_value
列名 类型 键 说明 item_id bigint P 商品id(联合主键) key_id bigint P 商品规格项id(联合主键) param_value varchar 商品规格信息
表关系
查询语句
- 查询某id商品信息,规格组、规格项、规格值:
SELECT
pg.group_name,
pk.key_name,
pv.param_value
FROM
tb_item_param_value pv
LEFT JOIN tb_item_param_key pk ON pv.key_id = pk.key_id
LEFT JOIN tb_item_param_group pg ON pk.group_id = pg.group_id
WHERE
item_id = xxxxx
缺点
- 需要创建多张表来描述规格参数之间的关系。
- 查询时需要复杂的sql语句查询。
- 规格参数数据量是商品信息的几十倍,数据量十分庞大,查询时效率很低。
- 商品参数变时需要改动多个表。
方案二
- 每一个商品对应一个规格参数的模板。
[
{
//规格组名称
"group": "主体",
// 组的规格项名称
"params": [
"品牌",
"型号",
"颜色",
"上市年份",
"上市月份"
]
},
{
"group": "网络",
"params": [
"4G",
"3G",
"2G"
]
}
]
- 添加商品时,根据规格参数模板生成表单,保存对应的规格参数的json格式。
[
{
//规格组名称
"group": "主体",
// 组的规格项名称
"params": [
{
"k": "品牌",
"v": "苹果(Apple)"
},
{
"k": "型号",
"v": "iPhone 6 A1589"
},
{
"k": "颜色",
"v": "白色"
},
{
"k": "上市年份",
"v": "2100"
},
{
"k": "上市月份",
"v": "12"
}
]
},
{
"group": "网络",
"params": [
{
"k": "4G",
"v": "支持"
},
{
"k": "3G",
"v": "支持"
},
{
"k": "2G",
"v": "支持"
}
]
}
]
流程
特点
- 优点:
- 单表查询,不需要做多表管理。
- 如果要求新添加的商品规格项发生改变,只需要变更模板,之前的商品还是按照之前的格式存储。
- 缺点:
- 复杂的表单和json之间的转换。对js的编写要求很高。