2011-04-22 58 views
2

這實際上是我在最近的一次採訪中問到的一個問題,我被打了個乾淨的圓球。如何在此文件系統模型中找到節點(文件或目錄)的絕對路徑

的問題是設計一個數據庫來代表一個文件系統中 -

  • 有一個根目錄和許多文件/目錄都存在裏面。
  • 目錄中可以有任意數量的目錄/文件。

要求

  • 找到所有出現在給定文件的同一目錄中的文件。
  • 給出一個文件/目錄,從根目錄找到它的路徑。

條件 - 必須有對模型中的一個數據庫表。不是強制性的,但由於面試問題有這種情況,所以很有必要。

我不知道製作樹和編號它如下面的圖中使得它如此更優化的 -

enter image description here

上述樹結構的有用的特性是 -

  • 考慮任何兩個子樹,例如子樹A(dir2及其子樹)和子樹B(dir3及其子樹)中,子樹A中所有節點的數量都小於Next_Subtree_First_Node,在此情況下爲dir3。

這時如果存儲這樣的數據庫結構的信息 -

_______________________________________________________________________ 
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"; 

我的問題

  • 上面的查詢將返回所有要求文件,但我怎麼事先知道Next_Subtree_First_Node和Previous_Subtree_Last_Node。

例如,對於file4,

Next_Subtree_First_Node = 7和 Previous_Subtree_Last_Node = 4。

  • 我不知道什麼應該是絕對路徑查找查詢的邏輯。請給點意見。

例如,鑑於file7,結果應該是 -

父目錄/ DIR3/dir4/file7。

回答

2

如果文件系統每個文件一個名稱(如在Windows中,所以沒有硬鏈接,如Unix的),那麼你可以回到包含目錄存儲與每個文件和跟蹤路徑根在底向上的方式。

從數據庫的角度來看,你將在目錄和它們包含的文件之間存在一對多的關係,並且在你處於根目錄之前迭代地處理父目錄。

0

我認爲你需要在哪裏創建表。

1:root_table: 哪裏有CHILDES(包括:目錄和文件)。

2:childe_table: 現在,這裏可以指定每根各類型和ID。

3:directory_table: 其中目錄名和父ID。

4:file_table: 如果文件名,父目錄編號。

,那麼你創建的關係......

而對於查詢你需要加入於是找到所有CHILDES和絕對路徑。

+0

對不起,我忘了提及必須只有一個表來模擬系統。但無論如何,我也會考慮你的答案。讓我們看看哪一個更好。 – 2011-04-22 09:48:27

+0

首先定義所有表,然後查詢或任何邏輯都可能,希望回答這個問題。 – 2011-04-22 09:51:07

相關問題