Mit dieser Sache befass ich mich zur Zeit auch
Grundsätzlich fallen mir zwei Lösungen ein, beide verwenden nur eine Tabelle:
Die eine wäre, den Datensätzen, welche die Dateien/Verzeichnisse repräsentieren, eine 'Parent ID' zu verpassen, die jeweils gleich der ID des in der Verzeichnisstruktur übergeordneten Elements ist.
Eine Datei im Ordner mit der ID 5 hätte also die Parent-ID 5. Auf diese Weise könnte man die einzelnen Datensätze zur einer beliebig verzweigten Baumstruktur verknüpen, genau wies in einem Dateisystem.
Ich hab mich letztlich jedoch für eine andere Lösung entschieden:
Mit jedem Datensatz wird der vollständige Pfad des jeweiligen Elements sowie zusätzlich der seines Elternelements gespeichert und das System ermittelt die für die Baumstruktur nötigen Daten aus diesen Strings.
Diese Lösung ist im Gegensatz zur ersten zwar speicheraufwändiger, umständlicher zu programmieren, damit fehleranfälliger und wirkt allgemein weniger elegant, dafür bietet sie jedocheinen entscheidenen Vorteil:
Da jedes Element seinen vollständigen Pfad, und nicht nur die Angabe des jeweiligen Elternelements enthält, ist es im Gegensatz zum anderen System möglich, Unterverzeichnisse sehr schnell und mit geringem Codeaufwand zu durchsuchen.