Datenstruktur für die Verzeichnisstruktur verwendet?
-
05-07-2019 - |
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.
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ürdeIch 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