Управление иерархиями в SQL: MPTT / вложенные множества против списков смежности против путей хранения
Некоторое время я боролся с тем, как лучше всего обращаться с иерархиями в SQL. Разочарованный ограниченностью списков смежности и сложностью MPTT / вложенных наборов, я начал думать о простом хранении ключевых путей вместо простогоnode_key/node_key/...
строка. Я решил собрать плюсы и минусы трех методов:
Техника хранимого пути использует те же или меньшие вызовы, чем другие методики, в каждом случае использования, кроме одного. Благодаря такому анализу хранение путей становится явным победителем. Не говоря уже о том, что это намного проще в реализации, удобочитаемо и т. Д.
Таким образом, вопрос в том, не должны ли хранимые пути считаться более сильной техникой, чем MPTT? Почему хранимые пути не являются более распространенным методом, и почему бы вам не использовать их поверх MPTT в данном случае?
Кроме того, если вы считаете, что этот анализ неполон, пожалуйста, дайте мне знать.
ОБНОВИТЬ:Вот, по крайней мере, две вещи, которые MPTT может сделать из коробки, чего не может сделать решение с сохраненным путем:
Позволяет рассчитывать количество подузлов для каждого узла без каких-либо дополнительных запросов (упомянутых выше).Навязывает порядок на узлах на заданном уровне. Другие решения неупорядочены.