E, pra piorar, uma categoria qualquer pode ter mais de um pai.
Se as categorias podem ter mais de um pai, fica mais difícil de responder sua pergunta sem dados exatos. Quais são seus requerimentos de pesquisa? Que tipos de pesquisa você vai fazer nesta árvore?
M
mauro_schneider
Boa Pergunta
Eu tenho a mesma situação aqui, com explosão de Produtos para o PCP, eu resolvi isto com uma função recursiva em Java (4 linhas de codigo).
Não sei se esta é a melhor solução, mas para mim resolveu.
[]s Mauro Schneider
F
fabio.patricio
Olá,
Na minha opniao fazer isso com SQL sem usar recursos de consulta hierarquica é algo que pode ficar ilegivel pra qualquer mortal.
]['s
boaglio
O Oracle oferece o recurso de “start with” com “connect by prior”
Pessoal, obrigado pelas respostas. Quanto às funções específicas de bancos, realmente não iremos usar. Obrigar o cliente a comprar um software mais caro que o produto em si não tem condições hehe
mister_m, o lance de um nodo ter mais de um pai precisa funcionar de maneira parecida às tags do Gmail. São filtros simples, com no próprio Gmail: “retorne todos os emails que tem a tag ‘trabalho’”. Só que em nosso caso as tags possuem outras informações.
Pelo que percebo até o momento a solução mais adequada é recuperar a informação com vários selects e a tabela de apoio. O que não seria tão ruim, já que a quantidade de níveis dificilmente passa de 4 ou 5.
louds
Otimize para o caso mais comum então…
table tag {
ID int primary key,
NOME char(50) not null
}
table rel {
ID_CHILD int primary key,
ID_PARENT int primary key
}
#TODO parentes ate 5 niveis
select * from rel as A
outer join rel as B on (A.ID_PARENT = B.ID_CHILD)
outer join rel as C on (B.ID_PARENT = C.ID_CHILD)
outer join rel as D on (C.ID_PARENT = D.ID_CHILD)
outer join rel as E on (D.ID_PARENT = E.ID_CHILD)
outer join rel as F on (E.ID_PARENT = F.ID_CHILD)
where
A.ID_CHILD in ( :leaves_id )
Coloca as foreign keys, um check/trigger/?? para evitar ciclos e o banco vai sempre estar íntegro.
Sobre a query. Vai dar trabalho extrair os dados dela, mas é factivel.
Essa query é executada primeiramente com o id que você quer e repetidamente com as folhas do passo anterior ate retornar vazio.
louds
Seu problema é igual ao de representar digrafos conexos assíclicos. Procura sobre isso no google.