2011-04-22 2 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.

  • 절대 경로 찾기 쿼리의 논리가 무엇인지 확실하지 않습니다. 아이디어를 좀주세요.

예. 주어진 파일 7의 결과는 -

상위 디렉토리/dir3/dir4/file7이어야합니다.

답변

2

파일 시스템에 파일 당 하나의 이름이 있으면 (예 : Windows 에서처럼 하드 링크가 없기 때문에) 각 파일에 포함 된 디렉토리를 저장하고 경로를 상향식으로 루트로 추적 할 수 있습니다 .

데이터베이스 용어로는 디렉토리와 포함 된 파일 사이에 일대 다 관계가 있으며 루트에있을 때까지 부모와 반복적으로 SELECT입니다.

0

테이블을 생성해야한다고 생각합니다.

1 : root_table : 칠레가있는 곳 (포함 : 디렉토리 및 파일).

2 : childe_table : 여기에 각각의 유형과 루트 ID를 지정합니다.

3 : directory_table : 여기서 디렉토리 이름과 상위 ID.

4 : file_table : 여기서 파일 이름, 상위 디렉토리 ID입니다.

그럼 당신은 관계를 만들 ...

그리고 쿼리에 대한 모든 childes와 절대 경로를 찾을 너무 가입해야합니다.

+0

죄송합니다. 시스템을 모델링하는 테이블이 하나만 있어야한다는 점을 잊어 버렸습니다. 그러나 어쨌든, 나는 당신의 대답도 고려할 것입니다. 어느 쪽이 더 나은지 보자. –

+0

먼저 모든 테이블을 정의한 다음 쿼리 또는 논리를 사용하여 질문에 답변 할 수 있습니다. –

관련 문제