Я рассматриваю возможность хранения рабочего каталога (то есть рекурсивной/вложенной папки/файлов) в базу данных mysql.Создание структуры папки/файла
Идея состоит в том, чтобы иметь таблицу «проектов» и таблицу, содержащую все папки/файлы с соответствующими путями в дереве (varchar).
Запрос проекта должен возвращать папки и файлы в виде списка путей String (+ некоторые метаданные), которые я буду использовать для построения дерева на клиенте.
Следует отметить, что записи «файла» в моем рабочем каталоге представляют собой метаданные, которые представляют файлы json в хранилище данных mongodb (они описывают веб-страницы как сложные вложенные json). Записи файлов будут запрашиваться чаще, чем папки (они вообще не запрашиваются) и будут связаны с другими таблицами. Для моего приложения файлы имеют другое значение, чем папки, которые важны для моего рабочего каталога.
Мой вопрос: что будет лучший вариант:
- Хранить файлы и папки в отдельных таблицах
- Хранить файлы и папки в той же таблице (записи будут практически идентичные), и использовать FK на объединенной таблице с 2 записями «файл»/«папка»
Короткий ответ:„классические“реляционных баз данных (в том числе MySQL) не очень хорошо в этом. Вот хорошая ссылка: [Управление иерархическими данными в mySQL] (http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/). Два подхода a) сохраняют * полный * путь в качестве столбца. Преимущество этой «псевдо-папки» заключается в том, что она проста и быстра. b) Используйте 3 таблицы: 1) папки, 2) данные, 3) «ссылки», которые связывают данные с папками (в потенциальном отношении n: m). – paulsm4
@ paulsm4 Спасибо за подсказку. Я попробовал начальную реализацию с mongodb, чтобы сохранить рекурсивное вложенное дерево как json, но обнаружил немало проблем с отсутствием транзакций. Какую систему хранения вы бы предложили? – Trace