Multiple tree parent (or digraph) sql server 2005

Preciso implementar uma árvore com vários parentais (ou um dígrafo) no SQL Server 2005. Li vários artigos, mas a maioria deles usa árvores com um único pai com uma raiz única, como a seguint

-My PC
   -Drive C
      -Documents and Settings
      -Program Files
         -Adobe
         -Microsoft
      -Folder X
   -Drive D
      -Folder Y
      -Folder Z

Neste, tudo deriva de um elemento raiz (Meu PC

No meu caso, um filho pode ter mais de um pai, como o seguinte:

G  A
 \ /
  B
 / \ 
X   C
  /  \
  D   E
  \ /
   F

Então, tenho o seguinte código:

create table #ObjectRelations
(
    Id varchar(20),
    NextId varchar(20)
)

insert into #ObjectRelations values ('G', 'B')
insert into #ObjectRelations values ('A', 'B') 
insert into #ObjectRelations values ('B', 'C')
insert into #ObjectRelations values ('B', 'X')
insert into #ObjectRelations values ('C', 'E') 
insert into #ObjectRelations values ('C', 'D') 
insert into #ObjectRelations values ('E', 'F') 
insert into #ObjectRelations values ('D', 'F') 

declare @id varchar(20)
set @id = 'A';

WITH Objects (Id, NextId) AS
( -- This is the 'Anchor' or starting point of the recursive query
  SELECT rel.Id,
         rel.NextId
    FROM #ObjectRelations rel
   WHERE rel.Id = @id
   UNION ALL -- This is the recursive portion of the query
  SELECT rel.Id,
         rel.NextId
    FROM #ObjectRelations rel
   INNER JOIN Objects -- Note the reference to CTE table name (Recursive Join)
      ON rel.Id = Objects.NextId
)
SELECT  o.*
FROM    Objects o

drop table #ObjectRelations

Que retorna o seguinte SET:

Id                   NextId
-------------------- --------------------
A                    B
B                    C
B                    X
C                    E
C                    D
D                    F
E                    F

Resultado esperado SET:

Id                   NextId
-------------------- --------------------
G                    B
A                    B
B                    C
B                    X
C                    E
C                    D
D                    F
E                    F

Observe que a relação G-> B está ausente, porque pede um objeto inicial (o que também não funciona para mim, porque não conheço o objeto raiz desde o início) e usar A como ponto de partida ignore o relacionamento G-> B.

Então, esse código não funciona no meu caso, porque solicita um objeto inicial, o que é óbvio em uma árvore pai ÚNICA (sempre será o objeto raiz). Mas na árvore multiparental, você pode ter mais de 1 objeto "raiz" (como no exemplo, G e A são os objetos "raiz", em que raiz é um objeto que não tem pai (ancestral)).

Então, eu meio que estou presa aqui ... Preciso modificar a consulta para NÃO pedir um objeto inicial e percorrer recursivamente a árvore inteira. Não sei se isso é possível com a implementação (Id, NextId) ... talvez seja necessário armazená-lo como um gráfico usando algum tipo de matriz de incidência, matriz de adjacência ou qualquer outra coisa (consultehttp: //willets.org/sqlgraphs.htm).

Qualquer ajuda? O que vocês acham pessoal? Muito obrigado pelo seu tempo =)

Felicidades

Fontes:Source 1 Source 2 Source 3

questionAnswers(3)

yourAnswerToTheQuestion