Frage

Ich mache ein Programm, das die Benutzerverzeichnisse (nicht im Fenster, in meiner app) bauen und in diesen Ordnern Unterordner vorhanden ist und so weiter; jeder Ordner muss entweder Ordner oder Dokumente enthalten. Was ist die beste Datenstruktur zu benutzen? Beachten Sie, dass der Benutzer einen Unterordner auswählen kann und die Suche nach Dokumenten in ihm und in seinem Unterordner. Und ich will nicht die Ordner oder Unterordner Ebene begrenzen.

War es hilfreich?

Lösung

Das ist, was ich tue:

Jeder Datensatz in der Datenbank hat zwei Felder: ID und ParentID. IDs sind 4-5 Zeichen (Base36, a-z: 0-9 oder so ähnlich). Übergeordnetes IDs sind eine Verkettung der Eltern komplette Struktur ...

So ...

Diese Struktur:

Root
   Folder1
   Folder2
      Folder3
   Folder4
      Folder5
         Folder6

würde wie folgt dargestellt werden:

ID     ParentID     Name

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

Ich mag diese Struktur, weil, wenn ich alle Dateien in einem Ordner zu finden, brauchen kann ich eine Abfrage wie tun:

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

Um einen Ordner zu löschen und alle seine Kinder:

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

Um einen Ordner und seine Kinder zu bewegen, müssen Sie alle Datensätze aktualisieren, die die gleich Eltern verwenden, auf die neuen Eltern.

  

Und ich will nicht die Ordner oder Unterordner Ebenen Linit

Eine offensichtliche Einschränkung ist, dass die Anzahl der Unterordner der Größe Ihres ParentID Bereich begrenzt sind.

Andere Tipps

Ich kann ein paar Möglichkeiten, denken Sie diese Struktur könnte, aber nichts würde schlagen die Hand:

Verwenden Sie das aktuelle Dateisystem.

ich in mit einer Art von Baumdatenstruktur

aussehen würde

Ich soll B + Baum empfehlen .... Sie leicht Indizierung verwenden kann (Seite, Ordner usw.) und alle.

B + Baum http://commons.wikimedia.org/wiki/File:Btree .png

für weitere Informationen: http://ozark.hendrix.edu/~burch/ cs / 340 / Lesen / btree / index.html

Ich weiß, dass die Frage, die speziell für eine Datenstruktur zu fragen, aber ...

Wenn Sie eine objektorientierte Sprache vielleicht verwenden, können Sie das zusammengesetzte Entwurfsmuster verwenden, die ideal für diese Art von hierarchischem Baum wie Struktur geeignet ist. Sie bekommen, was Sie fordern.

Die meisten OO-Sprachen kommen mit irgendeiner Art von Abstraktion für das Dateisystem, so gibt es, wo ich anfangen würde. Dann ist es eine Unterklasse, wenn Sie benötigen.

würde ich Verzeichnisse als ein Array von Objekten erwarten, welche Verzeichnisse oder Dateien, zum Beispiel.

Sie können m-way Baumdatenstruktur

verwenden
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top