Если понял правильно, то делал что-то подобное, допустим имеется модуль материалы содержащий в себе 3 типа записей папка, статья, файл. Используется одна общая таблица, например структура её такая:
id
type
did
name
info
path
date
size
поле type отвечает за тип записи, туда идет числовая/текстовая константа (например 0-папка, 1-статья, 2-файл), did это ид родительского эллемента, name - имя, date - дата создания, далее поля имеют значения в зависимости от типа
для папки info - описание, path - пусто, либо для сокращения запроса полное имя (папка/подпапка/файл.jpg), size - кол-во вложеных эл-в
для файла path физический путь до файла, info - описание, size - вес
для статьи info - текст статьи, size - кол-во символов, path - пусто, либо для сокращения запроса полное имя (папка/подпапка/статья)
поиск соответственно идет по одинаковым полям в таблице, но в зависимости от типа для пользователя эти поля интерпритируются по разному.