Подскажите, как лучше построить дерево.
Проблемы нет сделать на костылях, интересует как бы сделать правильнее и чтоб потом меньше спрашивать у базы (Postgresql).
Проблема: Объект может иметь двух родителей и сколько угодно детей
Пока видел готовые решения с одним родителем. Что-то упустил из виду? В идеале бы ruby/rails gem, но достаточно какого то алгоритма. Или SQL запрос увидеть. Я с ним пока на вы :)
Думается получать из базы что-то вроде: id;name;lvl;gender;father_id;mother_id
и это уже использовать для построения на странице.
Особенных требований нет, не страшно получить кольцо, достаточно 3 поколений. upd: Может не то ищу вообще? Может не алгоритм дерево, а я? :)
Макс: конкретно в моей задаче может быть только 2 родителя :) но, что-то мне подсказывает, что решение для двух будет вполне способно работать и с большим количеством связей.
Удобно для хранения древовидных структур использовать вложенные множества, объяснение принципа можно посмотреть phpclub.ru/detail/article/db_tree.
Минус такого подхода в том, что при каждом добавлении элемента в дерево, изменения коснутся большого числа строк. Но плюсом будет быстрый поиск и навигация при минимальном количестве обращений к базе
Как правильно нарисовать генеалогическое дерево. С родословной сложнее, - ведь когда вы женитесь, придётся строить ещё одно генеалогическое дерево, и как-то ограничивать вывод данных.
Построение зависимостей:
Для создания связей достаточно указать родителей, остальное соединять логикой.