¿Cómo modelar una red bayesiana o, más generalmente, un gráfico ponderado dirigido, en SQL?

StackOverflow https://stackoverflow.com/questions/323456

Pregunta

Encontré algunos artículos en línea que proporcionan ejemplos de cómo modelar gráficos de varios tipos (DAG, en particular) en SQL, pero todos parecían enormemente complejos, dada la relativa simplicidad de lo que están modelando.

¿Hay una forma mejor / estándar de hacer esto? Mi pensamiento actual es algo como esto:

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
) 

¿Hay algo malo en eso? ¿Alguien sabe de una manera mejor (más robusta, tal vez)?

¿Fue útil?

Solución

Este sería un enfoque bastante razonable. SQL realmente no hace bien las estructuras recursivas, aunque algunos sistemas como Oracle o SQL Server tienen una función de consulta recursiva.

Aunque puede encontrar una estructura que funcione mejor para tipos de búsqueda específicos, no creo que encuentre una estructura apreciablemente mejor en el caso general. Si los requisitos de su aplicación son limitados de esta manera, dicha optimización puede brindarle beneficios.

Como una red bayesiana es un Gráfico acíclico dirigido (DAG), un padre puramente recursivo La relación hijo-hijo no es suficiente para modelar la red (es decir, un nodo puede tener más de un padre), por lo que será necesaria una relación M: M del tipo que ha descrito.

Varios de los libros 'SQL for Smarties' de Joe Celko ofrece una buena visión general de las técnicas para implementar y consultar estructuras jerárquicas y gráficas en SQL. Estos son, con mucho, el mejor recurso sobre el tema que conozco. Muy recomendable.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top