0

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

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

+----+--------------+
| id |     name     |
+----+--------------+
|  1 | Top          |
|  2 | Science      |
|  3 | Astronomy    |
|  5 | Astrophysics |
|  6 | Cosmology    |
+----+--------------+

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

+----+--------+---------+
| 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”,然后向下工作到 Astrophysics,确认每个文件夹都存在。

这可以通过递归查询来实现吗?还是类似的?

我知道 folder_tree 的路径可能包含完全像 Top.Science.etc 的名称,但在这种情况下,文件夹名称包含 LTREE 中不允许的空格和符号。

4

1 回答 1

0

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

PostgreSQL“ltree”专为快速检索和搜索而设计。这不是关系数据库模型的典型解决方案,需要原子地修改,无锁,并且在修改时避免并发问题。

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

+----+--------------+--------+
| id |     name     | parent |
+----+--------------+--------+
|  1 | Top          |   null |
|  2 | Science      |      1 |
|  3 | Astronomy    |      2 |
|  5 | Astrophysics |      3 |
|  6 | Cosmology    |      4 |
+----+--------------+--------+
于 2020-04-28T12:37:55.213 回答