Эквивалент таблицы замыканий для графовых структур в SQL
Этот вопрос Как хранить древовидную структуру в s ql? привести к идее таблицы Closure для хранения деревьев, которая является оптимальной во многих отношениях.
Вопрос в том, есть ли что-то в этом роде для структур графов в SQL. Я видел эту статью, которая, кажется, обрисовывает в общих чертах структуру индекса графа, но это немного по моей голове. Интересно, есть ли какой-то способ создания нескольких вспомогательных таблиц для обработки распространенных запросов к графическим данным в SQL.
1 ответ
Я сделал презентацию, на которую вы ссылались, и меня спросили о реализации общих графиков с помощью аналогичного метода, но я так и не нашел его.
Конечно, есть проблемы с техникой, если у вас есть циклические графы, если вы не можете однозначно определить "начальный узел". Потому что в противном случае, если вы начнете с любого узла в цикле, вы захотите пройти через весь цикл на графике.
В SQL может быть проще использовать рекурсивный CTE, но я чаще всего использую MySQL, который не поддерживает синтаксис CTE до версии 8.0. И если у вас есть рекурсивная возможность CTE, вам лучше использовать ее вместо таблицы закрытия, потому что у вас меньше шансов на аномалии данных.
Другой вариант - изучить специализированную графовую базу данных. Для MySQL/MariaDB существует механизм хранения сообщества, который оптимизирует запросы к деревьям и графам: https://openquery.com.au/products/graph-engine