python --商品规格--表结构设计
商品规格表结构设计
商品规格包括规格组合、规格项,规格项为规格组的成员。
规格组
|-规格项:规格值
|-规格项:规格值
规格组
|-规格项:规格值
|-规格项:规格值
同一类商品的规格相同。
方案一
使用多个表存储商品规格。在已有的商品分类表和商品表的基础上,增加商品规格分组表、商品规格项表、商品规格值表。
表设计
商品表: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的编写要求很高。
python --商品规格--表结构设计的更多相关文章
- 商品表(spu)、规格表(sku)设计
1. 先做一下专业术语解释:spu和sku 这里拿iphone6s举例,它身上有很多的属性和值, 比如: 毛重: 420.00 g 产地: 中国大陆 容量: 16G, 64G, 128G 颜色: 银, ...
- Day08_商品规格管理
学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 0.学习 ...
- 电商项目-商品表(spu)、规格表(sku)设计
之前在工作中,需要实现商品规格功能,做了很长一段时间,现在回过头来整理下设计思路. sku,spu概念: SPU = Standard Product Unit (标准化产品单元),SPU是商品信息聚 ...
- TPshop的规格表设计原理机制
TPshop商品规格比较简单, 数据库设计清晰, 先看上图购买商品时对应的选择, 不同规格有着不同的价格和不同的库存. 再看看后台对应的设置,手机例子 颜色:黑色 白色 金色 内存:32G 64G ...
- ecshop 属性表(attribute)商品属性表(goods_attr)货品表(prduct) 商品数量的联系
ecshop 属性表(attribute)商品属性表(goods_attr)货品表(prduct) 商品数量的联系 一个商城的商品属性存放在属性表(attribute)里 ,每个商品对应的属性在goo ...
- CMDB资产管理系统开发【day25】:表结构设计2
表结构设计1详细注释代码 # _*_coding:utf-8_*_ __author__ = 'luoahong' from assets.myauth import UserProfile from ...
- tpshop商品属性表关系
TPshop 里面的商品属性, 首先看看TPshop商品详情中的属性介绍, 纯展示给用户看的. 再来tpshop看看商品列表帅选页面的属性,可以根据属性帅选不同的商品 再来看看tpshop后台属性管理 ...
- 巨蟒django之CRM1 需求分析&&表结构设计&&注册登录验证
1.需求分析 .项目 ()业务 ()权限的管理 .CRM customer relationship management 客户关系管理系统 .谁来使用CRM? 销售&&班主任& ...
- ofbiz数据库表结构设计(3)- 订单ORDER
对于订单来说,主要的表就是ORDER_HEADER和ORDER_ITEM.ORDER_HEADER就是所谓的订单头,一条记录代表一条订单. ORDER_PAYMENT_PREFERENCE是订单的支付 ...
随机推荐
- Codeforces Round #436 A. Fair Game
题意:给你n张卡片,上面写有数字,两个人选择两个数字,把相同数字的卡片都拿走,问能不能拿走所有的卡片并且两个人拿的卡片书相同. Examples Input 411272711 Output YES1 ...
- Cocos2dx开发之屏幕适配
由于各种智能手机的屏幕大小都不一致,会出现同一张图片资源在不同的设备分辨率下显示不一样的问题.为避免这样的情况,需要Cocos引擎能提供多分辨率的支持,也就是说要求实现这样的效果 — 开发者不需要考虑 ...
- 166. Fraction to Recurring Decimal (Math)
Given two integers representing the numerator and denominator of a fraction, return the fraction in ...
- Mac Eclipse 配置 SDK Manager Proxy (代理)
默认的下载地址非常慢,可以换成东软的代理. 顶部任务栏中选择SDK Manager -> 偏好设置 : 可以看到下载速度快了很多,出现类很多安装选项: 安装好后,在偏好设置窗口中,选择Clear ...
- 异常解决 Unable to write generated Java files for schemas: null
错误是在使用cxf调用其他系统接口时报出的.而且问题很诡异,只有服务器调用时才报错,本地直接写main方法直接调用却正常的.以下是异常的堆栈: ERROR c.k.p.webservice.WebSe ...
- [原]CentOS 7.2 1511部署L2TP/IPsec服务器及客户端
快过年了,感觉从去年开始,我们公司就变成了“别人的公司”,基本上提前一星期就放假了,好开心.正好可以利用这一段时间,把前段时间一些疑惑的问题解决下:) 然而挡在面前的一个拦路虎是:很多时候不能愉快的G ...
- 【mysql】decimal数据类型
1.float.double.decimal float:浮点型,4字节,32bit. double:双精度实型,8字节,64位 decimal:数字型,128bit,不存在精度损失,常用于银行帐目计 ...
- 【Mybatis】MyBatis快速入门(一)
Mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可 ...
- const和static readonly 区别
const的值是在编译期间确定的,因此只能在声明时通过常量表达式指定其值. 而static readonly是在运行时计算出其值的,所以还可以通过静态构造函数来赋值. static readonly ...
- c++两个类相互调用
有可能会碰到两个类之间的相互调用的问题,例如:定义了类A和类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A { B b; }; class B { A a; }; 编译器在声明A ...