Здравствуйте, Poisson, Вы писали:
[skip]
для начала я бы построил такое дерево:
id | parent_id | object_id | type_id |
где id <-> parent_id — задают собственно иерархию, object_id — ссылка на объект (на запись в соответствующей таблице), type_id — ссылка на тип (например таблицу типов или константа) объекта.
связка object_id — type_id является уникальной в пределах иерархии и однозначно задает объект.
вот теперь объекты уже можно хранить в разных таблицах.
при попытке прицепить нечто как "ребенка" к данному "папе" — проверяем тип папы и делаем выводы о допустимости такого прицепления. ну и т.д.
полезность:
для облегчения жисти (и избавления от рекурсии при разборе дерева) можешь еще построить транзитивное замыкание (ТЗ) этого дерева.
ТЗ усложнит вставку и копирование веток, но облегчит тебе жисть при удалении поддеревьев, а так же при навигации по дереву и определении всяких полезностей: типа всех потомков данного элемента, ветвистости дерева, входимости данного элемента в заданное поддерево и т.д.
... << RSDN@Home 1.0 beta 6a >>