如何有效地在数据库中保存树结构?

How can I effectively save a tree structure in a database?

我对 NoSQL 和关系数据库持开放态度。这个问题已经被问过几次了,但我的转折如下。

我希望能够快速找到并识别重复的子树。

例如,如果树是索引用户硬盘上的文件(和文件夹),我可能会这样:

    /   <-- root
  /      \
...        home
      /          \
   ugrad        course
    /          /    |    \
  ...        cs101 cs112 cs113

这可能适用于 User1

我希望能够在所有其他用户中找到 course > cs101cs112cs113 子树。

构建这个的有效方法是什么?

看起来这对 hash table 来说是个不错的工作。如果您认为需要,也应该可以在数据库中创建一个。要找到相似的子树,您只需检查与要比较的子树具有相同哈希值的桶,这应该会提高速度。

你的问题不清楚你是否也对目录结构中的(常规)files 相等感兴趣,或者只是目录 names 的子目录。您可以设计您的 哈希函数 来尊重或不尊重它们。文件系统属性也是如此,例如权限。如果相等包括权限,您可能不会在不同用户的主目录中找到相等的子树,因为通常用户目录中的文件属于该用户。

可能有更好的方法。