Mysql папки и документы - PullRequest
3 голосов
/ 01 ноября 2011

Я хочу иметь папки и документы, у каждого из которых есть папка. Папки могут иметь бесконечные дочерние папки. Какая, на ваш взгляд, лучшая схема 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 родительский ASC может получить правильное дерево)?

1 Ответ

2 голосов
/ 01 ноября 2011

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

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

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

Другое дело:

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

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