扫码关注官方订阅号
问一下一般的商品都有分类,商品的分类表的结构是如何实现的?如果想用Redis缓存这个分类表,该怎么设计键值对?
闭关修行中......
商品分类可以参考主流电商平台的设计,比如淘宝、京东之类的,简单点可以是树形结构,如:
女装 上衣 T恤 衬衫 ... 裤子 休闲裤 打底裤 短裤 ... 裙装 A字裙 连衣裙 ...
这种结构相对较为简单,本质上为一对多的关系,单表即可表示,通过父ID建立上下级关联,做Redis缓存设计时,可以简单的使用SET集合来实现
Redis
SET
category:女装 => <上衣,裤子,裙装,...> category:女装:上衣 => <T恤,衬衫,...> ...
如果是多对多结构的,如:T恤可属于上衣分类,也可属于夏装分类,此类结构,可以在分类表外多建一张关系表,用于表示多对多的关系,分类元数据仍然可以只使用一张表表示,不需要父ID字段,但在做Redis缓存设计时,稍微麻烦一点
# 父级与子级结构(SET) category:上衣 => <T恤,衬衫,...> category:夏装 => <T恤,衬衫,...> # 子级与父级结构(SET) category:T恤:parents => <上衣,夏装> category:衬衫:parents => <上衣,夏装>
使用上述结构的原因是,维护缓存时,节点的变更会同时影响到上下级,所以上级对下级、下级对上级的关系都应有所表示,便于维护。假如上述案例中,要删除T恤分类,就需要根据T恤分类找到所有父类,再将父类下的T恤节点移除,如果需要删除夏装分类,则反回来需要查出所有夏装子节点,具体是要移除子结点还是其它处理逻辑则应根据业务需要来定。
商品类型和商品有可能是多对多的关系一个商品可以属于多个类型,比如:黄瓜可以属于水果,蔬菜一个类型可以包含多个商品,比如:水果有黄瓜,西瓜按此设计,可以三个表,商品表,类型表,重点说关系表
MySQL关系表设计 商品 id 类型 id 黄瓜 水果 黄瓜 蔬菜 Redis 可以使用集合保存商品和类型关系 集合1 名称:商品 id 里面保存他的类型 id 集合2 名称:类型 id 里面保存属于他的商品 id
如果是一对多的设计就简单了一个商品只能属于一种类型一个类型可以有多个商品
MySQL 关系表 商品 id 类型 id 黄瓜 蔬菜 西瓜 水果 Redis 保存商品和类型关系 key-value: 商品->类型 集合 名称:类型 id 里面保存属于他的商品 id
搜搜sku spu
redis 集合就行。
如果你这个结构已经定下来了并投入使用了,最好是不要去动关系表,麻烦点就麻烦点没什么好办法吧。
但是如果可以改表结构的话,还是建议弄个水平的关系结构吧;
表1: 存储每个分类的基本信息,id,名称,描述(假设女装id为1,T恤id为2,上衣id为3,夏装id为4)
表2: 存储每个分类的水平关系: 比如T恤可属于上衣分类,也可属于夏装分类;那就是两条记录: 第一条记录的主要字段: 1-3-2 第一条记录的主要字段: 1-4-2 这样的话要删除和T恤相关的分类只要把表2中带有'%2%'的记录剔除就行
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
商品分类可以参考主流电商平台的设计,比如淘宝、京东之类的,简单点可以是树形结构,如:
这种结构相对较为简单,本质上为一对多的关系,单表即可表示,通过父ID建立上下级关联,做
Redis缓存设计时,可以简单的使用SET集合来实现如果是多对多结构的,如:T恤可属于上衣分类,也可属于夏装分类,此类结构,可以在分类表外多建一张关系表,用于表示多对多的关系,分类元数据仍然可以只使用一张表表示,不需要父ID字段,但在做
Redis缓存设计时,稍微麻烦一点使用上述结构的原因是,维护缓存时,节点的变更会同时影响到上下级,所以上级对下级、下级对上级的关系都应有所表示,便于维护。假如上述案例中,要删除T恤分类,就需要根据T恤分类找到所有父类,再将父类下的T恤节点移除,如果需要删除夏装分类,则反回来需要查出所有夏装子节点,具体是要移除子结点还是其它处理逻辑则应根据业务需要来定。
商品类型和商品有可能是多对多的关系
一个商品可以属于多个类型,比如:黄瓜可以属于水果,蔬菜
一个类型可以包含多个商品,比如:水果有黄瓜,西瓜
按此设计,可以三个表,商品表,类型表,
重点说关系表
如果是一对多的设计就简单了
一个商品只能属于一种类型
一个类型可以有多个商品
搜搜sku spu
redis 集合就行。
如果你这个结构已经定下来了并投入使用了,最好是不要去动关系表,麻烦点就麻烦点没什么好办法吧。
但是如果可以改表结构的话,还是建议弄个水平的关系结构吧;
表1: 存储每个分类的基本信息,id,名称,描述(假设女装id为1,T恤id为2,上衣id为3,夏装id为4)
表2: 存储每个分类的水平关系: 比如T恤可属于上衣分类,也可属于夏装分类;那就是两条记录:
第一条记录的主要字段: 1-3-2
第一条记录的主要字段: 1-4-2
这样的话要删除和T恤相关的分类只要把表2中带有'%2%'的记录剔除就行