2008-11-27 5 views
7

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.¿Cómo modelar una red bayesiana o, más generalmente, un gráfico ponderado dirigido, en SQL?

¿Existe 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 de malo en eso? Alguien sabe de una manera mejor (más robusta, tal vez)?

Respuesta

8

Esto 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 traerle beneficios. Como una red bayesiana es una Directed Acyclic Graph (DAG), una relación padre-hijo puramente recursiva no es suficiente para modelar la red (es decir, un nodo puede tener más de un padre), por lo que una relación M: M del tipo usted ha descrito que va a ser necesario.

Varios de los libros 'SQL for Smarties' por Joe Celko ofrecen una buena visión general de las técnicas para implementar y consultar estructuras jerárquicas y gráficas en SQL. Estos son de lejos el mejor recurso sobre el tema que yo sepa. Altamente recomendado.

Cuestiones relacionadas