В дереве может быть вагон файлов, которые могут быть папками, которые могут содержать и то и другое в любом количестве, у того и другого разный набор мета-данных (атрибутов), как это хранить в реляционной (SQL) БД?
Соотв. всегда есть Folders.Index = 0 который являет собою корень.
Пока что думаю про три таблицы:
Files
index, …props
Folders
index …props
Tree
Index,Folders.Index, Files.Index
На самом деле, если в СУБД нет встроенной поддержки иерархии, то поле “ссылка на родителя” - единственный приемлемый вариант. Ну и далее дерево получается на клиенте с помощью запросов (рекурсия, например).
А СУБД? Если мускул, то он не поддерживает ту фишку с with. Но все равно лучше в одной таблице с parent_id, тем более что жесткое ограничение вложенности. Если не жесткое то в хранимках скорее всего придется морочиться с динамическими запросами или на клиенте