Попробуйте, таким образом, вы получите выделенный объект главы внутри
Это - то, что я делаю:
Каждая запись в базе данных имеет два поля: идентификатор и ParentID. Идентификаторы являются 4-5 символами (Base36, a-z:0-9 или что-то подобное). Родительские идентификаторы являются конкатенацией полной структуры родителя...
Так...
Эта структура:
Root
Folder1
Folder2
Folder3
Folder4
Folder5
Folder6
Был бы представлен как это:
ID ParentID Name
0000 NULL ROOT
0001 0000 Folder1
0002 0000 Folder2
0003 00000002 Folder3
0004 0000 Folder4
0005 00000004 Folder5
0006 000000040005 Folder6
Мне нравится эта структура, потому что, если я должен найти все файлы под папкой, я могу сделать запрос как:
SELECT * FROM Folders WHERE ParentID LIKE '0000%' -- to find all folders under Folder1
Удалить папку и всех ее детей:
DELETE FROM Folders WHERE ID='0004' AND ParentID LIKE '00000004%'
Для перемещения папки и ее детей необходимо обновить все записи, которые используют того же родителя к новому родителю.
И я не хочу к linit папки или уровни подпапок
Очевидное ограничение к этому - то, что количество подпапок ограничено размером Вашего поля ParentID.
Я могу думать о нескольких способах, которыми Вы могли структурировать это, но ничто не разобьет очевидное:
Используйте фактическую файловую систему.
Я изучил бы использование своего рода древовидной структуры данных
Большинство языков OO идет со своего рода абстракцией для файловой системы, таким образом, существует то, где я запустил бы. Затем разделите его на подклассы, если Вы должны.
Я ожидал бы каталоги как массив объектов, которые являются каталогами или файлами, например.
Я знаю, что вопрос конкретно просит структуру данных, но...
При использовании объектно-ориентированного языка, возможно, можно использовать составной шаблон разработки, который идеально подходит для этого типа иерархического дерева как структура. Вы получаете то, что Вы просите.
вы можете использовать m-way древовидную структуру данных