V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
onice
V2EX  ›  程序员

商品多级分类数据库怎么设计

  •  
  •   onice · 2020-03-01 10:47:08 +08:00 · 7087 次点击
    这是一个创建于 1763 天前的主题,其中的信息可能已经有所发展或是发生改变。

    www.erdangjiade.com.png

    如图所示的商品分类,数据库应该怎么设计?

    我自己的思路是用一张表来设计。

    字段有:id,category_name,parent_id

    其中放一个字段来存放父级分类的 ID。

    还有个简单的做法,每一层分类都设计成一张表。

    项目需求只涉及到三层分类,那么就三个表:一级分类表->二级分类表->三级分类表,从左至右,他们是一对多的关系。

    但需求要求分类和商品是多对多的关系。一个商品可以有多种分类,一个分类对应多种商品。

    这个时候,例如查询父级分类,要把所有该分类和子分类下的商品都查询出来,

    像 ORM 的话,该怎么去查询呢?

    请大家多多指教。

    第 1 条附言  ·  2020-03-01 20:14:56 +08:00
    感谢大家的指教。由于项目是个人项目,为了加快开发进度,我把这个功能砍掉了,只留了一个大分类,就像是博客那样。
    第 2 条附言  ·  2020-03-03 11:28:11 +08:00
    补充个完整的图:
    ![www.erdangjiade.com2.png]( https://i.loli.net/2020/03/01/2f5F1cXpTneQiDt.png)
    12 条回复    2020-03-02 05:27:50 +08:00
    lasuar
        1
    lasuar  
       2020-03-01 10:55:54 +08:00
    三级体现在哪里?不是商品有个属性而已吗,分类,颜色,布局,语言四个字段,没理解对?
    airyland
        2
    airyland  
       2020-03-01 10:56:26 +08:00
    如果可以确定只有 3 级,直接保存 3 级的字段到商品表里,这样就可以查询任何一级的商品了。
    onice
        3
    onice  
    OP
       2020-03-01 11:22:03 +08:00
    @lasuar 我是这么理解的。一级是首页的分类,如下图示:
    ![www.erdangjiade.com2.png]( https://i.loli.net/2020/03/01/2f5F1cXpTneQiDt.png)
    一级就是顶部的分类,有 js 特效,php/mysql 等,二级分类就是左侧的分类,有:模板分类,模板颜色,模板布局,模板语言,三级就是二级分类右侧的分类,例如模板分类右侧的不限,行业,商城。
    onice
        4
    onice  
    OP
       2020-03-01 11:22:49 +08:00
    @airyland 这个方法可行。感谢!
    imn1
        5
    imn1  
       2020-03-01 13:18:13 +08:00
    级数不多,而且每节点有唯一父级,path 方式记录,这样组织分类不需要递归,可以直接查
    Macolor21
        6
    Macolor21  
       2020-03-01 13:26:51 +08:00
    这不是多级分类,而是规格属性,库存应是 SKU,商品货号是 SPU,大概是这样把。
    详细设计参考电商: https://www.cnblogs.com/leefreeman/p/4060227.html
    jj783850915
        7
    jj783850915  
       2020-03-01 13:32:14 +08:00 via Android
    同 6L 那这个相当于 sku 的 tag 分类应该是 数码产品>通讯工具>手机 这种类型等我
    Macolor21
        8
    Macolor21  
       2020-03-01 13:33:19 +08:00
    拿手机来说,
    规格-->货品 ,规格=高通 865, 摄像头 1200W,分辨率多少,规格是通用的,可以绑定大的货品,如 iPhone11,小米 10
    属性-->商品 ,金色 iPhone 128g. 属性和商品绑定在一起就成了 sku,实际的库存数量。 属性的金色相比规格,更不通用。 货品包含多个属性的商品
    lasuar
        9
    lasuar  
       2020-03-01 16:56:35 +08:00
    @onice 贴图完整点嘛,看了首页图才明白你的意思。虽然可以把每级分类都作为字段,但这样不够灵活,特别是当有些商品只有 2 级分类,而有些商品增加到 4 级甚至更多分类的时候,这里通过 parent_id 的方式会更节省字段和灵活一点,要说递归查询的话也不会有多少速度影响,毕竟你的场景是商品分类,分类不会是无限级,分类表数据不会太大。
    这样做的话
    如果要查询 A 分类下的所有商品:
    》根据 A 分类递归查询到最深层的所有分类 id 集合,然后使用 in typ_id_sets 查出所有的商品即可(商品的分类 id 字段表示最深层的分类)
    meteor957
        10
    meteor957  
       2020-03-01 21:34:38 +08:00 via Android
    最好 pid 关联下,3 级分类 根据需求后面大概率会变
    abellee000
        11
    abellee000  
       2020-03-02 03:28:00 +08:00 via Android
    树状关系 可以参考 closure table
    okchum
        12
    okchum  
       2020-03-02 05:27:50 +08:00
    同 6 楼,这个不属于分类。这个功能更像 Filter,筛选 Attribute。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2537 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 04:48 · PVG 12:48 · LAX 20:48 · JFK 23:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.