#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
столбцом. Мне нравится думать о папках / файлах как о «узлах» в дереве, поэтому они в основном одинаковы. Дополнительные метаданные будут сохранены в другой таблице.