商品数据表设计分析:先设计商品信息总表,再根据总表进行扩展关联出其它各表
1. 商品信息表 product
字段名称 | 类型 | 注释 | 备注 |
---|---|---|---|
id | int(10) | 主键(自增) | 商品在数据库中的编码 |
cid | int (10) | 分类 | 关联product_cates表ID |
title | varchar(100) | 商品名称 | |
pro_no | varchar (20) | 商品编码 | 随机生成的一个字符串 |
keywords | varchar(255) | 关键字 | 方便用户搜索 |
img | varchar(255) | 商品主图 | 建议采用路径存储url |
price | decimal (10,2) | 商品最低价 | 为了吸引用户进入浏览 给出最低配置甚至配件价格 |
desc | varchar(255) | 商品描述 | 商品简介,广告词等 |
pv | int (10) | 点击量 | 分析流量,统计数据 |
status | tinyint (1) | 产品状态 | 状态:-1 已删除 0 下架 1 上架 |
add_time | int(10) | 发布时间 | 添加时间 |
pro_no:由于外部访问不允许显示商品在数据库中的真实编码,防止非法刷库,所以需要生成一个随机字符串商品编码
cid:分类ID与商品类目表的ID进行关联,后台再根据CID查询商品类目表中的ID来对应循环出分类属性
2. 商品类目表(商品分类)product_cates
字段名称 | 类型 | 注释 | 备注 |
---|---|---|---|
id | int(10) | 主键(自增) | - |
pid | int(10) | 上级分类id | 0为最高分类 1 为二级分类 数字越大 分类越后 |
ord | int(3) | 排序 | - |
title | varchar(50) | 标签标题 | 分类名称 |
status | tinyint (1) | 产品状态 | 状态: 0 正常 1 禁用 |
add_time | int(10) | 添加时间 | - |
PID和ORD 如果不分类或不排序 默认为0
- 商品图片表 product_img 一般是商品有多图展示 甚至视频 而我们也单独用一个表来展示这一块
字段名称 | 类型 | 注释 | 备注 |
---|---|---|---|
id | int(10) | 主键(自增) | - |
product_id | int(10) | 商品ID | 关联product表ID |
img | varchar(255) | 图片路径 | 建议采用路径存储url |
add_time | int(10) | 添加时间 | - |
图片表我们也可以添加 图片名称 图片扩展名 图片大小 等属性字段,也可以忽略,但图片路径必填项
字段名称 | 类型 | 注释 | 备注 |
---|---|---|---|
name | varchar(255) | 图片名称 | |
ext | varchar(255) | 图片扩展名 | |
size | int(255) | 图片大小 |
4. 祥情描述contents 另外商品有个祥情描述,由于内容较多,减轻数据库访问压力,我们需要独立创建一个表
字段名称 | 类型 | 注释 | 备注 |
---|---|---|---|
字段名称 | 类型 注释 | - | |
id | int(10) | 主键(自增) | - |
product_id | int(10) | 商品ID | 关联product表ID |
contents | text | 商品祥情描述 | - |
这个表也是通过produt_id 来关联商品信息表的 如果一个商品多个图 就是多个图片的produt_id都一样的,以上4张表,基本上把商品基本信息组建完成了, 下面我们要写配置属性表,这个表相对比较复杂,一般电商做的产品类型众多,也就造成了产品属性的不同,如电子产品有内存,版本,但是鞋子就变成了材质,尺寸,所以我们必需要想办法让属性配置单独做出多个表来分配给各种不同类型的产品,而这个方法就是SKU,在电商中有SKU叫销售属性,就是根据不同的属性和属性值生成不同的SKU编码,便于电商系统识别商品库存
5. 属性名表 property_name
字段名称 | 类型 | 注释 | 备注 |
---|---|---|---|
id | int(10) | 主键(自增) | - |
cid | int(10) | 所属类目ID | 与商品信息表中的cid对应 与商品类目表中的ID对应 |
title | varchar(50) | 属性名 | 例如:颜色 版本 尺寸 |
is_sale | tinyint(1) | 是否销售属性 | 0否 1 是 |
注:is_sale是否为销售属性 是指产品中有些属性会影响销售价格和库存 有些属性不会影响(如:重量,配送地区)也叫SUP
- 属性值表 property_value
字段名称 | 类型 | 注释 | 备注 |
---|---|---|---|
id | int(10) | 主键(自增) | - |
name_id | int(10) | 属性名称id | 关联property_name表id |
value | varchar(255) | 属性值 | - |
img | varchar(255) | 属性图片 | - |
7. 商品 属性名 属性值 关联表 property
字段名称 | 类型 | 注释 | 备注 |
---|---|---|---|
id | int(10) | 主键(自增) | - |
product_id | int(10) | 商品ID | 关联product表ID |
name_id | int(10) | 类目属性名id | 关联property_name表id |
value_id | int(10) | 类目属性值id | 关联property_value表id |
property表其实就是属性名表和属性值的合并 初看数据库认为此表与8表重复,其实不然,因为is_sale是否为销售属性,
如果不是销售属性,前端就可以直接读取此表数据,如果是销售属性就要读取sku表数据了
8. 商品库存量表 product_sku 此表为关键表,根据商品的属性和属性值来判定商品的价格和库存量
字段名称 | 类型 | 注释 | 备注 |
---|---|---|---|
id | int(10) | 主键(自增) | - |
product_id | int(10) | 商品ID | 关联product表ID |
properties | text | 属性键值对 | property_name:property_value 关联两张表的ID |
price | decimal (10,2) | 商品价格 | - |
cost | decimal (10,2) | 商品成本 | 可有可无值 |
stock | int(10) | 库存 | - |
weight | int(10) | 重量 | 克 |
此表的关键点在于properties 此字段比较特殊text,可以把属性键和值一起放,属性键值对:property_name:property_value 关联两张表的ID
对于 key,value 存储比较新颖,但是关键还是得看代码是怎么实现读取的