• 请不要在回答技术问题时复制粘贴 AI 生成的内容
onice
V2EX  ›  程序员

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

  •  
  •   onice · Mar 1, 2020 · 8023 views
    This topic created in 2275 days ago, the information mentioned may be changed or developed.

    www.erdangjiade.com.png

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

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

    字段有:id,category_name,parent_id

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

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

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

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

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

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

    请大家多多指教。

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