這實際上是我在最近的一次採訪中問到的一個問題,我被打了個乾淨的圓球。如何在此文件系統模型中找到節點(文件或目錄)的絕對路徑
的問題是設計一個數據庫來代表一個文件系統中 -
- 有一個根目錄和許多文件/目錄都存在裏面。
- 目錄中可以有任意數量的目錄/文件。
要求
- 找到所有出現在給定文件的同一目錄中的文件。
- 給出一個文件/目錄,從根目錄找到它的路徑。
條件 - 必須有對模型中的一個數據庫表。不是強制性的,但由於面試問題有這種情況,所以很有必要。
我不知道製作樹和編號它如下面的圖中使得它如此更優化的 -
上述樹結構的有用的特性是 -
- 考慮任何兩個子樹,例如子樹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。
對不起,我忘了提及必須只有一個表來模擬系統。但無論如何,我也會考慮你的答案。讓我們看看哪一個更好。 – 2011-04-22 09:48:27
首先定義所有表,然後查詢或任何邏輯都可能,希望回答這個問題。 – 2011-04-22 09:51:07