Базы данных. Хранение файловой структуры и мета-данных

В дереве может быть вагон файлов, которые могут быть папками, которые могут содержать и то и другое в любом количестве, у того и другого разный набор мета-данных (атрибутов), как это хранить в реляционной (SQL) БД?
Соотв. всегда есть Folders.Index = 0 который являет собою корень.

Пока что думаю про три таблицы:
Files
index, …props
Folders
index …props
Tree
Index,Folders.Index, Files.Index

А что за файлы? Для чего это?

Гугл говорит, что есть куча вариантов с разными преимуществами/недостатками, в некоторых СУБД есть свое нестандартное.
http://troels.arvin.dk/db/rdbms/links/#hierarchical

папку тоже можно считать просто файлом.

Самая простая реализация - поле типа parent_id.

1 лайк

Вопрос больше о хранении таких структур данных, нежели самих файлов/папок физически (что было бы странно).

Да, я об этом и говорил.

http://sbytestream.pythonanywhere.com/blog/Sql-Hierarchical-Data + про hierarchyid в MS SQL Server.

Почитаю, благодарю.

На самом деле, если в СУБД нет встроенной поддержки иерархии, то поле “ссылка на родителя” - единственный приемлемый вариант. Ну и далее дерево получается на клиенте с помощью запросов (рекурсия, например).

А СУБД? Если мускул, то он не поддерживает ту фишку с with. Но все равно лучше в одной таблице с parent_id, тем более что жесткое ограничение вложенности. Если не жесткое то в хранимках скорее всего придется морочиться с динамическими запросами или на клиенте

СУБД - как сервер (что-то из бесплатных решений) так и клиент (встраиваемая, Firebird/SQLite) так что скорее всего клиентская будет без ХП и прочего.

В огнептице и sqlite начиная с каких-то версий есть такие возможности, вроде можно иерархическим запросом выбрать дерево, не пробовал )

пойду гуглить и это