Pergunta

Eu encontrei alguns artigos on-line fornecendo exemplos de como modelar gráficos de vários tipos (DAGs, em especial) em SQL, mas todos eles pareciam extremamente complexo, dada a relativa simplicidade do que está modelando.

Existe uma maneira melhor / padrão de fazer isso? Meu pensamento atual é algo como isto:

create table node (
  id int not null auto_increment,
  name TEXT
)

create table edge (
  from_node int not null,
  to_node int not null,  
  weight float
) 

Existe errado alguma coisa com isso? Alguém sabe de um (talvez mais robusto,) maneira melhor?

Foi útil?

Solução

Esta seria uma abordagem bastante razoável. SQL realmente não faz estruturas recursivas bem, embora alguns sistemas como Oracle ou SQL Server tem uma função de consulta recursiva.

Embora você possa encontrar uma estrutura que funciona melhor para tipos específicos de pesquisa Eu não acho que você vai encontrar uma estrutura bem melhor no caso geral. Se os requisitos de sua aplicação são limitados, desta forma, como uma otimização pode trazer-lhe beneficiar.

Como uma rede bayesiana é um Directed acíclico Graph (DAG), um pai puramente recursiva relacionamento-filho não é suficiente para modelar a rede (ou seja, um nó pode ter mais de um dos pais), de modo a M:. relação M do tipo que você descreveu vai ser necessário

Various do 'SQL para Smarties' livros de Joe Celko dar uma boa visão geral das técnicas para a implementação e consulta de estruturas hierárquicas e gráfico em SQL. Estes são, de longe, o melhor recurso sobre o assunto que eu saiba. Altamente recomendado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top