Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

fabiapo

Devolver nodos em uma procedure

Recommended Posts

Pessoal,

 

Tenho que montar uma árvore hierárquica do tipo pai/filho em uma procedure do postgresql, onde tenho que acessar uma tabela que contém o ID do pai e o ID do filho e montar esta árvore.

 

Posso montar a árvore a partir do pai, do filho ou mesmo do avó. Assim, se for através do filho, tenho que achar quem é o pai e para cada irmão encontrado, verificar se ele não possui filhos.

 

Pergunta: Alguém saberia como desenvolver esta função devolvendo o nodo com a estrutura hierárquica ou teria algum link onde eu pudesse ter uma noção de como fazer?

 

Muito obrigada!

Compartilhar este post


Link para o post
Compartilhar em outros sites

1. se não me engano, o PostgreSQL possui um tipo para armazenar grafos, porém me parece que você quer implementar "no braço", sem usar recursos nativos.

2. você já tem o algorítimo de como fazer ? Acredito ser este o primeiro passo: como você faria se não fosse no PostgreSQL, se fosse em algoritimo ou em uma linguagem como C ?

3. como será a estrutura de sua tabela ? CREATE TABLE foo ( ID int, ID_PAI int ) ?

4. qual a definição de sua função ? seria "função nodo ( ID : int ) : literal" ?

5. como sua função representa um retorno como o abaixo:

1

|

2 3 4

 

poderia ser representado por 1.2,3,4 ? Onde "." representa uma descida de nível e "," os irmãos ?

 

abraço,

Compartilhar este post


Link para o post
Compartilhar em outros sites

loureirorg,

 

Muito obrigada pela resposta!

 

Seguem os itens que você me questionou:

 

2 - O meu algoritmo seria: verificar primeiramente se o id é um pai. Se não for, preciso identificar o pai deste filho. Em seguida, faço um cursor onde busco todos os filhos deste pai e identifico se cada filho possui algum filho. Se o filho possuir outro filho, eu seto um indicador. Assim, não preciso expandir a árvore com N níveis e deixo a consulta mais performática. Na minha aplicação, coloco uma pastinha com um item "+" para que o usuário saiba que existe um filho para o filho e, caso ele queira visualizar, faço uma nova consulta na base apenas para o item selecionado.

 

3-a estrutura da minha tabela seria ID do pai, ID do filho, ambos inteiros e chave primária composta.

 

4-a minha função receberia um ID, que pode ser do pai ou do filho, e eu identificaria quem é quem através de busca recursiva caso o id informado seja de um filho (até acharmos o pai). Após identificar o pai, chamo uma segunda função (que reutilizo para montar aquela árvore do filho que citei acima) onde busco toda a árvore de filhos dado o ID do pai.

 

5- Minha função retornaria o id do pai, id do filho, dados específicos do filho e indicador de mais filhos (sim ou não).

 

Eu estava mais em dúvida pois a minha demanda seria montar N níveis dado um ID pai ou ID filho. Mas consegui convencer de que esta não seria uma solução muito performática. Assim, ficou mais fácil o desenvolvimento e não sobrecarrega tanto o banco de dados. Certo?

 

Encontrei um link na net que pode ajudar quem precise de uma solução semelhante: http://pt.efreedom.com/Question/1-512831/Subindo-uma-relacao-pai-filho-de-banco-de-dados-no-PostgreSQL

 

Você teria uma solução mais simples?

 

Obrigada!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.