Database design 如何在此文件系统模型中查找节点(文件或目录)的绝对路径

Database design 如何在此文件系统模型中查找节点(文件或目录)的绝对路径,database-design,filesystems,modeling,absolute-path,Database Design,Filesystems,Modeling,Absolute Path,这实际上是在最近的一次采访中向我提出的一个问题,我完全同意 问题是设计一个数据库来表示文件系统,其中—— 有一个根目录,其中有许多文件/目录 目录中可以有任意数量的目录/文件 要求 查找给定文件的同一目录中存在的所有文件 给定一个文件/目录,从根目录查找其路径 条件 -模型必须有一个数据库表。不是强制性的,但很好,因为面试问题有这个条件 我不知道如下图所示制作一棵树并对其编号会使其更加优化- 上述树结构的有用特性是—— 考虑到任何两个子树,例如子树A(dir2及其子树)和子树B(di

这实际上是在最近的一次采访中向我提出的一个问题,我完全同意

问题是设计一个数据库来表示文件系统,其中——

  • 有一个根目录,其中有许多文件/目录
  • 目录中可以有任意数量的目录/文件
要求

  • 查找给定文件的同一目录中存在的所有文件
  • 给定一个文件/目录,从根目录查找其路径
条件 -模型必须有一个数据库表。不是强制性的,但很好,因为面试问题有这个条件

我不知道如下图所示制作一棵树并对其编号会使其更加优化-

上述树结构的有用特性是——

  • 考虑到任何两个子树,例如子树A(dir2及其子树)和子树B(dir3及其子树),子树A中所有节点的数量将小于下一个子树的第一个节点,在本例中为dir3
然后,如果我们将信息存储在这样的数据库结构中-

_______________________________________________________________________
Sequence_Number    Name                 type   
-----------------------------------------------------------------------
0                  Parent Directory     Dir  
1                  dir1                 Dir  
2                  file1                File  
3                  file2                File  
4                  file3                File  
5                  dir2                 Dir  
...

________________________________________________________________________
注意-上述结构是我在讨论中记得的。这可能不是解决问题的最佳结构。如果需要更改,请告诉我

第一个问题是这样的-

_______________________________________________________________________
Sequence_Number    Name                 type   
-----------------------------------------------------------------------
0                  Parent Directory     Dir  
1                  dir1                 Dir  
2                  file1                File  
3                  file2                File  
4                  file3                File  
5                  dir2                 Dir  
...

________________________________________________________________________
查找同一目录中的所有文件

Select Name From File_System 
  where Sequence_Number Between Next_Subtree_First_Node 
    and Previous_Subtree_Last_Node 
    and type = "File";
我的问题

Select Name From File_System 
  where Sequence_Number Between Next_Subtree_First_Node 
    and Previous_Subtree_Last_Node 
    and type = "File";
  • 上面的查询将返回所有必需的文件,但如何事先知道下一个_子树_First_节点和上一个_子树_Last_节点
例如,对于文件4

下一个_子树_第一个_节点=7和 上一个\子树\最后一个\节点=4

  • 我不确定绝对路径查找查询的逻辑应该是什么。请给出一些想法
例如,给定文件7,结果应为-


父目录/dir3/dir4/file7。

如果文件系统的每个文件都有一个名称(如在Windows中;因此没有硬链接,如在Unix中),则可以将包含的目录与每个文件一起存储,并以自底向上的方式将路径追溯到根目录


在数据库术语中,目录和它们包含的文件之间有一对多的关系,并且迭代地选择父目录,直到找到根目录。

我认为您需要在其中创建表

1:根目录表: 存在子目录的位置(包括:目录和文件)

2:childe_表: 现在,您可以使用each的类型和根的Id来指定每个

3:目录表: 其中目录名和父id

4:文件表: 其中文件名、父目录id

然后你创建了一个关系


对于查询,您将需要join以便查找所有子项和绝对路径

对不起,我忘了提到只有一个表才能对系统进行建模。但无论如何,我也会考虑你的答案。让我们看看哪一个更好。首先定义所有表,然后查询或任何逻辑可能是可能的,希望回答问题。