Возможно, вы захотите посмотреть nested sets. Я давно знал об этом методе, прежде чем на самом деле пытаюсь использовать его в рабочей системе, главным образом потому, что об этом очень мало написано. Я был приятно удивлен легкостью запросов к графической информации, которая чрезвычайно сложна с использованием списков смежности или любого другого метода.
Однако у него есть недостатки, которые делают его полезным в очень специфических средах: список должен быть статическим. То есть после создания очень мало обслуживания самого списка - перемещение узлов по отношению друг к другу, добавление новых узлов или удаление существующих узлов. Это связано с тем, что каждая строка зависит от других строк (которые зависят от других строк и т. Д.). Изменение в списке может включать обновление всех записей, которые следуют за ним в списке. Это небольшое усилие для небольших изменений.
У меня был идеальный прецедент: образовательные стандарты всех штатов, округ Колумбия и территории США. Образовательные стандарты меняются не чаще одного раза в год, и большинство государств меняют их гораздо реже, чем это. Во всяком случае, как только школьные годы начинаются, стандарты, действующие в данный момент, остаются в силе в течение продолжительности. Поэтому, когда списки создаются в начале года, они не меняются до начала следующего года.
Представьте, что вы можете запрашивать информацию, содержащуюся только в поддереве любого узла дерева. Абсолютная сила!
Были и другие хорошие применения, которые мне никогда не приходилось выполнять, например школьные каталоги, которые также проходят очень небольшие изменения после начала семестра.
Под «изменениями» обратите внимание, что я ссылаюсь на изменения, которые управляют структурой дерева: вставка нового узла, перемещение узла из одного места в другое, удаление узла и т. Д. Обновления содержимого узла являются не проблема.
Также обратите внимание, что у меня было несколько недель, чтобы поиграть, чтобы ознакомиться со структурой. Вы можете написать некоторые радикальные запросы, но потребуется некоторое время, чтобы узнать об этом в системе.
Он может не соответствовать вашим потребностям сейчас, но это не помешает получить базовое понимание, когда оно может стать полезным. Это слишком мощная структура для игнорирования.
Перейдите по этой ссылке Управление иерархическими данными в MySQL http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ –
Это FAQ. Пожалуйста, зайдите в свой заголовок. – philipxy
Переход на MySQL 8.0 или MariaDB 10.2, чтобы вы могли использовать рекурсивные CTE. –