11

ユーザーがディレクトリを作成するプログラムを作成しています(ウィンドウではなく、アプリで)。これらのフォルダーにはサブフォルダーなどがあります。すべてのフォルダーには、フォルダーまたはドキュメントのいずれかが含まれている必要があります。使用するのに最適なデータ構造は何ですか? ユーザーはサブフォルダーを選択し、その中およびそのサブフォルダー内のドキュメントを検索できることに注意してください。また、フォルダーやサブフォルダーのレベルを制限したくありません。

4

7 に答える 7

15

これが私がすることです:

データベースのすべてのレコードには、ID と ParentID の 2 つのフィールドがあります。ID は 4 ~ 5 文字です (Base36、az:0-9 など)。親 ID は、親の完全な構造を連結したものです...

そう...

この構造:

Root
   Folder1
   Folder2
      Folder3
   Folder4
      Folder5
         Folder6

次のように表されます。

ID     ParentID     Name

0000   NULL           ROOT
0001   0000           Folder1
0002   0000           Folder2
0003   00000002       Folder3
0004   0000           Folder4
0005   00000004       Folder5
0006   000000040005   Folder6

この構造が気に入っているのは、フォルダーの下にあるすべてのファイルを検索する必要がある場合、次のようなクエリを実行できるためです。

SELECT * FROM Folders WHERE ParentID LIKE '0000%' -- to find all folders under Folder1

フォルダとそのすべての子を削除するには:

DELETE FROM Folders WHERE ID='0004' AND ParentID LIKE '00000004%'

フォルダーとその子を移動するには、同じ親を使用するすべてのレコードを新しい親に更新する必要があります。

そして、フォルダーやサブフォルダーのレベルを制限したくありません

これに対する明らかな制限は、サブフォルダーの数が ParentID フィールドのサイズに制限されていることです。

于 2008-11-01T17:44:31.340 に答える
8

これを構成する方法はいくつか考えられますが、明らかな方法に勝るものはありません。

実際のファイル システムを使用します。

于 2008-11-01T17:39:24.440 に答える
5

ある種のツリーデータ構造の使用を検討します

于 2008-11-01T17:50:56.523 に答える
2

B+ Tree をお勧めします .... 索引付け (ページ、フォルダーなど) とすべてを簡単に使用できます。

B+ ツリー http://commons.wikimedia.org/wiki/File:Btree.png

詳細情報: http://ozark.hendrix.edu/~burch/cs/340/reading/btree/index.html

于 2013-10-17T08:42:41.260 に答える
0

質問が具体的にデータ構造を求めていることは知っていますが...

オブジェクト指向言語を使用している場合は、このタイプの階層ツリーのような構造に最適な複合設計パターンを使用できます。あなたはあなたが求めているものを手に入れます。

于 2008-11-01T19:47:29.203 に答える
0

ほとんどの OO 言語には、ファイル システムの何らかの抽象化が組み込まれているため、ここから始めます。次に、必要に応じてサブクラス化します。

たとえば、ディレクトリは、ディレクトリまたはファイルであるオブジェクトの配列として期待されます。

于 2008-11-01T20:01:08.817 に答える
0

m-wayツリーデータ構造を使用できます

于 2010-04-02T17:51:25.417 に答える