PostgreSQL Trees

Пришло озарение, что при работе с древовидными структурами в реляционных СУБД, таких как PostgreSQL, встроенные функции — штука полезная и незаменимая.

Например, в целях массовой оптимизации я храню весь путь до какой-либо ноды в отдельном поле «path_cache» (не столько путь по id, сколько реальный путь, ибо это древо для работы с ЧПУ). Проблема, естественно, в том, что при переносе части дерева или изменениях в родителе этот путь надо снова пересчитывать. Что делать, Мама?

Да всё просто, описываем свою функцию get_path(integer), которая смотрит наличие уже просчитанного пути в поле path_cache. Если путь ещё не просчитан (при любых переменах просто даём полю значение NULL), то мы запрашиваем его и записываем в это поле. В итоге запрос к СУБД выглядит «как обычно», а на заднем плане имеет место быть постоянная проверка данных на целостность.

SELECT *, get_path(id) AS path FROM url;

И будет всем щастя.

Top

Слова: postgresql, trees, databases

Комментарии Отключены