@S10LI

Как организовать файловую систему в БД?

Я делаю простое приложение для склада. Соответственно мне нужно хранить в базе Разделы и Элементы склада.
В целом моя задача напоминает хранение в базе файловой системы

Сейчас это выглядит так:

Есть таблица FOLDERS в ней две колонки
PATH и NAME

Она нужна для того что бы когда приложение делает запрос например на чтение папки - проверялось существует ли такая папка или нет

Пример:

read '/'
выводит все папки (NAME) у которых PATH = '/'

Файлы каждой папки я храню в отдельной таблице

Например:
В таблице FOLDERS есть
PATH -> '/'
NAME - > 'FOLDER1'

Для этой папки соответственно есть таблица '/FOLDER1'

В таблице FOLDERS есть
PATH -> '/FOLDER1/'
NAME - > 'SUBFOLDER1'

Для этой папки соответственно есть таблица '/FOLDER1/SUBFOLDER1'

Сначала я пробовал держать всё в одной таблице и просто для каждого элемента
склада указывать путь в колонку 'PATH'. Но возникали сложности при обработке вариантов, что
пользователь например удаляет папку (проверить что папка уже существует, удалить все содержимое папки соответственно все подпапки и файлы и т.д.)

В общем можно ли как то это всё упростить? Может уже есть какие то готовые решения?
  • Вопрос задан
  • 162 просмотра
Решения вопроса 1
@ComodoHacker
Есть несколько вариантов хранения иерархических данных в реляционной БД. Выбор зависит в основном от запросов клиентов и требований к производительности.

Если хотите разобраться в вопросе и сделать осознанный выбор, вот немного теории (и практики):

books.google.com/books?id=uw2lq2o4VbUC

https://blog.duncanworthy.me/sql/hierarchical-data...

https://habr.com/ru/post/263629/
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@full_stack_newbie
Такую структуру можно хранить в одной таблице, введя дополнительное поле, где хранится id родителя.
Ответ написан
Комментировать
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Зачем что то хранить если оно есть?
Отдавайте им файловую структуру
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы