PostgreSQL Trees
Пришло озарение, что при работе с древовидными структурами в реляционных СУБД, таких как PostgreSQL, встроенные функции — штука полезная и незаменимая.
Например, в целях массовой оптимизации я храню весь путь до какой-либо ноды в отдельном поле «path_cache» (не столько путь по id, сколько реальный путь, ибо это древо для работы с ЧПУ). Проблема, естественно, в том, что при переносе части дерева или изменениях в родителе этот путь надо снова пересчитывать. Что делать, Мама?
Да всё просто, описываем свою функцию get_path(integer), которая смотрит наличие уже просчитанного пути в поле path_cache. Если путь ещё не просчитан (при любых переменах просто даём полю значение NULL), то мы запрашиваем его и записываем в это поле. В итоге запрос к СУБД выглядит «как обычно», а на заднем плане имеет место быть постоянная проверка данных на целостность.
SELECT *, get_path(id) AS path FROM url;
И будет всем щастя.
Слова:
postgresql,
trees,
databases