Иерархические структуры в реляционных СУБД



На этой неделе разгребаю в проекте разные тудушки, поэтому больше читаю и обдумываю, чем пишу код 😂



Вот вам цикл из двух статей, в которых автор сравнивает три подхода к хранению иерархических структур в реляционках:

• список смежных вершин (adjacency list),

• материализованный путь (materialized path),

• вложенное множество (nested set).



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



В конце первой статьи есть раздел про комбинирование подходов. Особенно удобно комбинировать на проектах с CQRS: списки смежных вершин на запись и списки + материализованные пути на чтение.



https://habr.com/ru/post/46659/

https://habr.com/ru/post/47280/



Забавно. В первой статье есть примеры на Doctrine 1, и они безбожно устарели. Но основной материал будет актуален ещё долго...