Используя ваши примеры данных, я на самом деле получаю другое дерево ...
Relations Table Tree
================ =======
ChildID ParentID 1 2
3 1 \ /|
3 2 3 |
4 3 \|
4 2 4
5 4 |
5
Вы действительно хотите два независимых дерева? Если это так, вы можете ввести дополнительное поле, например идентификатор дерева ...
Relations Table Tree1 Tree2
======================= ===== =====
TreeID ParentID ChildID
1 NULL 1 1 2
1 1 3 | |
1 3 4 3 3
1 4 5 | |
2 NULL 2 4 4
2 2 3 | |
2 3 4 5 5
2 4 5
Без какой-либо дополнительной информации у вас всегда будут проблемы разделения и объединения ветвей без очень хорошо сформированного набора ограничений. Например, если вы хотите два линейных дерева 1-3-4-5 и 2-3-4-6, ваша текущая модель будет иметь это ...
Relations Table Tree
================ =======
ParentID ChildID 1 2
1 3 \ /
2 3 3
3 4 |
4 5 4
4 6 / \
5 6
Однако теперь у вас проблема в том, что существует ЧЕТЫРЕ линейных пути ...
- 1-3-4-5
- 1-3-4-6
- 2-3-4-5
- 2-3-4-6
Что может потребоваться для вас, чтобы описать ситуацию в реальном мире, именно то, что вы хотите от нее, и то, что вы не хотите от нее.
Мой типичный опыт заключается в том, что для целей отчетности любой узел в дереве должен иметь только одного родителя, но может иметь много дочерних элементов. Это означает, что при подъеме по дереву у вас есть только один маршрут, а при спуске по дереву данные разделяются на подузлы.
Наличие многих родителей и многих детей создает сеть, а не дерево Где у вас есть несколько маршрутов, независимо от того, в каком направлении вы проходите дерево.