Хранение структуры каталогов в базе данных - PullRequest
7 голосов
/ 27 июля 2010

В моем приложении rails пользователь может иметь структуру каталогов, в которой есть папки и файлы в подпапках.Каков наилучший способ хранения таких данных?
Кроме того, какая база данных предлагает лучший способ сделать это?

Ответы [ 3 ]

6 голосов
/ 27 июля 2010

Вы можете сохранить дерево каталогов в одной таблице, используя любую базу данных SQL, сделав таблицу самоссылочной.Хорошим примером является таблица каталогов установщика Windows , где вы увидите такую ​​структуру:

  • Directory = поле идентификатора первичного ключа, обычно целое число
  • Directory_Parent = поле идентификатора "внешнего ключа", которое указывает на идентификатор другого каталога в той же таблице
  • Значение = строка, содержащаяимя папки / папки

Ваша таблица файлов будет иметь внешний ключ, ссылающийся на идентификатор каталога.Чтобы найти полный путь, вы должны следовать по цепочке и строить путь с конца (справа), прикрепляя каждый родительский каталог вперед (слева).Например, файл будет указывать на идентификатор каталога «4» с подпапкой «Значение», затем вы извлекаете родительское значение «папка», затем родительские значения снова, пока не доберетесь до корня, создавая путь, подобный /root/folder/subfolder/filename.

2 голосов
/ 28 июля 2010

Если ваша база данных поддерживает рекурсивные запросы (либо соединение Oracle с помощью, либо стандартные рекурсивные общие выражения таблиц), тогда с самореференсной таблицей все в порядке (ее легко обновлять и запрашивать).

Если ваша СУБД не поддерживает иерархические запросы, то, вероятно, Eimantas предложит использовать предварительно упорядоченную схему обхода дерева.

1 голос
/ 27 июля 2010

Это простое дерево хранится в sql. Либо проверьте стандартную parent-child схему, либо внедрите предварительно упорядоченную схему обхода дерева (слева направо).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...