首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgres递归LTREE查找

Postgres递归LTREE查找
EN

Stack Overflow用户
提问于 2020-04-28 20:24:43
回答 1查看 161关注 0票数 0

我有以下两个表示嵌套文件夹层次结构的表

表“文件夹”包含基本的文件夹信息

代码语言:javascript
复制
+----+--------------+
| id |     name     |
+----+--------------+
|  1 | Top          |
|  2 | Science      |
|  3 | Astronomy    |
|  5 | Astrophysics |
|  6 | Cosmology    |
+----+--------------+

表"folder_tree“包含层次结构,使用的是LTREE类型的文件夹ids和列路径。

代码语言:javascript
复制
+----+--------+---------+
| 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中是不允许的。

EN

回答 1

Stack Overflow用户

发布于 2020-04-28 20:37:55

这不是一个答案,而是一个不适合评论部分的评论

PostgreSQL "ltree“是为快速检索和搜索而设计的。对于需要自动修改、无锁且在修改时避免并发问题的关系数据库模型,它不是一个典型的解决方案。

如果这是一个NoSQL解决方案,那就没问题了。但是,在关系建模中,您可以避免冗余。例如,您的两个表可以建模为单个表:

代码语言:javascript
复制
+----+--------------+--------+
| id |     name     | parent |
+----+--------------+--------+
|  1 | Top          |   null |
|  2 | Science      |      1 |
|  3 | Astronomy    |      2 |
|  5 | Astrophysics |      3 |
|  6 | Cosmology    |      4 |
+----+--------------+--------+
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61480117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档