【发布时间】:2019-12-29 16:25:37
【问题描述】:
我有多个类别,可以有 None 或一个或多个子类别。
这个过程理论上可以无限。所以,这就像拥有多棵树。
树示例。
A
- A1
- A11
- A12
-A2
B
C
- C1
我也有物品。一个项目可以属于多个类别。
此时连接类别,在数据库中我使用三个字段:
children(一个类别的孩子),
path([1,4,8],基本上就是祖父母,父母,类别本身的id)
深度,代表树中每个类别的层级
使用这些字段可以避免一些递归并使用更多查询。
我通常检索如下数据:
顶级类别(深度 0)
一个类别的子类别
同级类别
类别中的项目(例如祖父类别,将显示其直接项目、子项目和孙子项目)
目前我正在使用Django(想迁移到FastAPI)和PostgreSQL,每次对类别进行CRUD操作时,都会修改三个字段(路径,深度,子项)。
我在想也许是一种更好的方法来维护/检索类别树和相应的项目。
【问题讨论】:
标签: python sql python-3.x postgresql recursive-query