Папки и документы Mysql

#mysql #tree

#mysql #дерево

Вопрос:

Я хочу иметь папки и документы, у каждого из которых есть папка. Папки могут иметь бесконечные дочерние папки. Какая, по вашему мнению, лучшая схема mysql.Как вы думаете, это хорошо?

 Table Folders
  id
  name
  parent (if null the root)
  auth_user (access control type)
  created_date
  created_by

 Table documents
   id
   name
   type
   idFolder (FK id of folders)
   auth_user (access control type)
   created_date
   created_by
 

Как вы думаете, вышесказанное хорошо или у вас возникнут проблемы позже? Как вы думаете, с помощью вышеизложенного можно быстро и легко получить дерево папок (я думаю, что с помощью ORDER BY parent ASC можно получить правильное дерево)?

Ответ №1:

списки смежности хороши для вставок и перемещения поддеревьев, но если вам нужно запрашивать глубже, чем на один уровень, это боль в a **, потому что в итоге вы получите n-joins, если вы углубитесь на n уровней. Пример: покажите мне всех потомков / предков папки X.

Я предлагаю использовать список смежности (parent_id) в сочетании с одной из следующих моделей:

Мне очень нравится вложенный набор, но у него есть недостаток — вставки выполняются медленно. Но обычно у вас будет больше операций чтения (просмотра) структуры, чем вставки новых узлов.

Еще одна вещь:

Обычно я помещаю папки и документы в одну таблицу и помечаю их логическим is_folder столбцом. Мне нравится думать о папках / файлах как о «узлах» в дереве, поэтому они в основном одинаковы. Дополнительные метаданные будут сохранены в другой таблице.