Mysql系列二 新零售

没有比正直更富的遗产。
No more than just rich heritage.

新零售

一个产品包含多个商品

SPU SKU

SPU 标准**产品**单位,SPU描述一个产品的各种特征。

SKU 是库存进出计量的单位,SKU是物理上不可分割的最小存货单元。

SKU与权重

  1. B2C:修改SKU对权重影响不大,如:新零售、苏宁易购;
  2. B2B:修改SKU对商品权重影响很大,如:淘宝;

SPU SKU关系图

表设计

品类参数表

注:

  1. 级连结构表结构,如评论、分类等;
  2. VARCHAR不添加索引,通常采用中文分词技术;
  3. 精确的浮点数:DECIMAL(10, 2)
    1. 10代表:整数位+小数位 = 10
    2. 2精确到小数点后两位
  4. 商品价格是一个字段还是两个字段?
    1. 一个字段就够了,然后在用户相关的等级表中定义打折力度即可。

SKU && SPU

SKU: 产品表,如手机;
SPU: 商品表,如iPhone12

{
"t_spu": [
{
"id" : 1,
"title" : "小米",
"sub_title" : null,
"category_id" : 3,
"brand_id" : 3,
"spg_id" : 10001,
"saleable" : 1,
"valid" : 1,
"create_time" : "2021-01-03 03:56:45",
"last_update_time" : "2021-01-03 03:56:45"
}
]}
{
"t_sku": [
{
"id" : 2,
"spu_id" : 1,
"title" : "Xiaomi\/小米 小米9 8GB+128GB 全息幻彩蓝 移动联通电信全网通4G手机",
"images" : "{\"desc\": [\"http:\/\/127.0.0.1\/3.jpg\", \"http:\/\/127.0.0.1\/4.jpg\"], \"facade\": [\"http:\/\/127.0.0.1\/1.jpg\", \"http:\/\/127.0.0.1\/2.jpg\"]}",
"price" : 3299.00,
"param" : "{\"CPU\": \"骁龙855\", \"内存\": 128, \"电池\": 4000, \"运存\": 8, \"屏幕尺寸\": 6.39}",
"saleable" : 1,
"valid" : 1,
"create_time" : "2021-01-03 03:57:45",
"last_update_time" : "2021-01-03 03:57:45",
"is_deleted" : 0
}
]}

param为json类型,来源品类表对应的--参数表

库存表

商品与库存

零售店与库存

用户表 & 收货表

没有用户&收货地址就没法下单;会员制度存在于各行各业。

用户加密可以采用:AES,对称加密;可以采用用户相关字段作为加密参数;增加破解难度。

-- 测试加密
SELECT AES_ENCRYPT('hello', 'new'); -- 二进制
SELECT HEX(AES_ENCRYPT('hello', 'new')) -- 转为十六禁止
SELECT AES_DECRYPT(UNHEX('B18CC45526AF3CC0F4874D03EE5183E1'), 'new'); -- 解密

关于密码存储问题

  • 加密解密时机
  1. 代码层面加密解密存储
  2. SQL自带加密解密
  • 加密解密方式
  1. 对称加密
    1. 全表一个加密key
    2. 每个用户都有一个key;
      1. 如何选择这个key,如果是nick,后续可能更改
    3. 破解难易程度,感觉有规律就差不多。也可能2>1
INSERT INTO  `t_customer`(username, `password`, wechat, tel) VALUES
(
'xiaoming',
HEX(AES_ENCRYPT('123456+1s', 'xiao')),
'xiaoming_wechat',
'1333333333'
);

购物券

购物券有使用期限,一个订单只能使用一张购物券;

购物券和客户记录需要关联;

关联表不采用复合主键的原因是,一个用户可以领取多个购物券。

订单表

订单需要两个表的原因,如果存进JSON不适合检索。一个订单可能包含N个商品

  1. 有ID还有订单流水号code的原因?
    1. code可以包含商品属性分类;如a:吃的b:用的c:喝的
    2. 可以加入时间
    3. 根据自己的需求加入即可
  2. type: 销售不同的渠道
  3. shop_id、customer_id都可以为空,因为网络销售、线下销售情况不一样;

进销存

  1. 新零售需要明确记录,进货、发货、退货等
  2. 因此需要先有员工表,员工又有所属的部门表职位表;
  3. 是否有权限操作新零售,又需要 用户表
  4. 用户可能有多个角色,故需要 角色表
  5. 为简单选择一对一【用户–角色】
  6. 进销存需要 快递表
    1. 一个定单可能有多个快递,但是sku不一样
    2. 订单表中记录的是总的邮费;快递表中记录的是单个快递的邮费
    3. sku–需要保存订单对应的所有的sku,如果两个同样的商品[3],就记录: [3,3]
  7. 有发货就有 退货表
    1. 同一个订单可以包含多个sku,那么orderId就不可以设置唯一性约束;
    2. payment 退货分:全额、部分,所以和sku的价格不一致, 退货人员自己判断;
  8. 购买结束,即需要评价
    1. 评价可以只对订单中的其中一个或多个SKU进行评价;
    2. img 可以包含多个图片、视频,json保存URL;
  9. 供货商相关
    1. 商品都卖出去了,肯定有人提供货源
    2. 供货表 供货-商品表
  10. 当发生的采购与入库
    1. 采购表入库表关联表
    2. 参考下图:018

【员工】与【用户】的关系是什么?

参考

阿里新零售数据库设计与实战