我有以下两个表示嵌套文件夹层次结构的表
表“文件夹”包含基本的文件夹信息
+----+--------------+
| id | name |
+----+--------------+
| 1 | Top |
| 2 | Science |
| 3 | Astronomy |
| 5 | Astrophysics |
| 6 | Cosmology |
+----+--------------+表"folder_tree“包含层次结构,使用的是LTREE类型的文件夹ids和列路径。
+----+--------+---------+
| id | folder | path |
+----+--------+---------+
| 32 | 1 | 1 |
| 33 | 2 | 1.2 |
| 36 | 3 | 1.2.3 |
| 37 | 4 | 1.2.3.4 |
| 38 | 5 | 1.2.3.5 |
+----+--------+---------+我希望验证一个确切的文件夹结构是否存在,当给定一个结构数组时,例如如何按顺序验证“Top”,“Science”,“Astronomy”,“Astrophysics”。
我相信递归查询可以工作,它首先查看根文件夹‘Top’,然后向下工作到天体物理学,确认每个文件夹都存在。
这可以通过递归查询来实现吗?或者类似的?
我知道folder_tree的路径可以包含完全像Top.Science.etc一样的名称,但在本例中,文件夹名称包含空格和符号,这在LTREE中是不允许的。
发布于 2020-04-28 20:37:55
这不是一个答案,而是一个不适合评论部分的评论
PostgreSQL "ltree“是为快速检索和搜索而设计的。对于需要自动修改、无锁且在修改时避免并发问题的关系数据库模型,它不是一个典型的解决方案。
如果这是一个NoSQL解决方案,那就没问题了。但是,在关系建模中,您可以避免冗余。例如,您的两个表可以建模为单个表:
+----+--------------+--------+
| id | name | parent |
+----+--------------+--------+
| 1 | Top | null |
| 2 | Science | 1 |
| 3 | Astronomy | 2 |
| 5 | Astrophysics | 3 |
| 6 | Cosmology | 4 |
+----+--------------+--------+https://stackoverflow.com/questions/61480117
复制相似问题