商品模块-数据库-表设计
表关系:
分类表 <= 商品表 <= SKU表(库存表)
分类表 <= 属性名 <= 属性值
商品表 <= 商品和属性关系表 => 属性名|属性值
业务逻辑:
1.同一商品不同SKU库存和售价不同.
2.不同类型的商品具有不同的属性名和属性值(如汽车和服饰),所以属性需要支持后期添加和维护.
3.在某个商品分类下通过属性筛选商品.
4.商家某件商品的销量统计,该件商品内几个不同SKU的销量统计.
####分析模块
分类表:
(商品分类编号, 分类名称, 父分类编号)
(1, 男装, 0)
(2, 裤子, 1)
(3, 外套, 1)
(4, 内裤, 1)
(5, 袜子, 1)
商品表:
(商品编号, 商品名称, 商品分类编号, 卖家编号, SPU销量, 评论数)
(1, '裤子名', 2, 1, 0)
(2, '外套名', 3, 1, 0)
(3, '内裤名', 4, 1, 0)
(4, '袜子名', 5, 1, 0)
SKU表(库存表):
(SKU编号, 商品编号, SKU属性, 价格, 库存, SKU销量)
(1, 1, [1:1,2:3], 99, 400, 0) 其中 [1:1,2:3] 表示 "颜色为黑色,尺码为X"
(2, 1, [1:1,2:4], 99, 200, 0) 其中 [1:1,2:4] 表示 "颜色为黑色,尺码为XL"
(3, 1, [1:2,2:3], 99, 300, 0) 其中 [1:2,2:3] 表示 "颜色为白色,尺码为X"
(4, 1, [1:2,2:4], 99, 100, 0) 其中 [1:2,2:4] 表示 "颜色为白色,尺码为XL"
上面只列出商品1这个分类的4个SKU.
属性名:
(属性名编号, 属性名, 商品分类编号, 父属性编号)
(1, 颜色, 2, 0)
(2, 尺码, 2, 0)
(3, 品牌, 2, 0)
上面只列出裤子这个分类的3个属性名.
属性值:
(属性值编号, 属性值, 属性名编号)
(1, 黑色, 1)
(2, 白色, 1)
(3, X, 2)
(4, XL, 2)
(5, 七匹狼, 3)
(6, 九牧王, 3)
上面只列出裤子这个分类的6个属性值.
商品和属性关系表:
(自增编号, 商品编号, 属性名编号, 属性值编号)
(1, 1, 1, 1) 商品1颜色为黑色
(2, 1, 1, 2) 商品1颜色为白色
(3, 1, 2, 3) 商品1尺码为X
(4, 1, 2, 4) 商品1尺码为XL
上面只列出商品1的4个属性关系.
商品和属性筛选表:
(商品编号, 商品具有的属性值编号)
(1, [1,2,3,4])
用SQL全文检索实现筛选.
如:
select * from 商品表
inner join 商品和属性筛选表
on 商品表.商品编号 = 商品和属性筛选表.商品编号
where 商品表.商品分类编号 = 2
and 商品和属性筛选表.商品具有的属性值编号 MATCH '1 3'
order by 商品表.评论数 DESC LIMIT 10 OFFSET 20;
商品搜索表:
(商品编号, 商品标题和内容)
(1, [无需词典,二元分词])
用SQL全文检索实现搜索.
Django实现模块
#(分类表)
class Classify(models.Model):
#商品分类编号
P_GFID = models.AutoField(primary_key=True)
#分类名称
classifyname = models.CharField(max_length=20)
#父分类编号
parent_number = models.CharField(max_length=10)
#(商品表)
class Goods(models.Model):
#商品编号
productid = models.AutoField(primary_key=True)
#商品名称
productname = models.CharField(max_length=50)
#商品分类编号
P_GFID = models.ForeignKey('Classify', on_delete=models.CASCADE)
#卖家编号(该店铺为自营店)
sellernumber = models.BooleanField(True)
#SPU是标准化产品单元,区分品种;SKU是库存量单位,区分单品;商品特指与商家有关的商品,可对应多个SKU
#SPU销量
SPUsales = models.CharField(max_length=20)
#(库存表)
class SKU(models.Model):
#库存编号
SKUid = models.AutoField(primary_key=True)
#商品编号
productid = models.ForeignKey('Goods',on_delete=models.CASCADE)
#SKU属性
SKUattribute = models.CharField(max_length=20)
#商品价格
price = models.CharField(max_length=10)
#剩余库存
inventory = models.CharField(max_length=20)
#SKU销量
SKUsales = models.CharField(max_length=20)
#(属性名)
class Property_name(models.Model):
#属性名编号
propertyname_id = models.AutoField(primary_key=True)
#属性名
property_name = models.CharField(max_length=20)
# 商品分类编号
P_GFID = models.ForeignKey('Classify', on_delete=models.CASCADE)
#父属性编号
parent_number = models.CharField(max_length=10)
#(属性值)
class Property_values(models.Model):
#属性值编号
propertyvalues_id = models.AutoField(primary_key=True)
#属性值
property_values = models.CharField(max_length=20)
# 属性名编号
propertyname_id = models.ForeignKey('Property_name', on_delete=models.CASCADE)
#(商品和属性关系表)
class Goods_Property(models.Model):
#商品和属性关系表编号
goods_property_id = models.AutoField(primary_key=True)
# 商品编号
productid = models.ForeignKey('Goods', on_delete=models.CASCADE)
# 属性名编号
propertyname_id = models.ForeignKey('Property_name', on_delete=models.CASCADE)
# 属性值编号
propertyvalues_id = models.ForeignKey('Property_values', on_delete=models.CASCADE)