Domanda

Ho trovato online alcuni articoli che forniscono esempi di come modellare grafici di vari tipi (DAG, in particolare) in SQL, ma sembravano tutti enormemente complessi, data la relativa semplicità di ciò che stanno modellando.

Esiste un modo migliore / standard per farlo? Il mio pensiero attuale è qualcosa del genere:

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
) 

C'è qualcosa di sbagliato in questo? Qualcuno sa di un modo migliore (più robusto, forse)?

È stato utile?

Soluzione

Questo sarebbe un approccio abbastanza ragionevole. SQL non fa davvero bene le strutture ricorsive, sebbene alcuni sistemi come Oracle o SQL Server abbiano una funzione di query ricorsiva.

Anche se potresti trovare una struttura che funziona meglio per specifici tipi di ricerca, non penso che troverai una struttura apprezzabilmente migliore nel caso generale. Se i requisiti della tua applicazione sono limitati in questo modo, tale ottimizzazione può portare vantaggi.

Poiché una rete bayesiana è un Directed Acyclic Graph (DAG), un genitore puramente ricorsivo -child relazione non è sufficiente per modellare la rete (ovvero un nodo può avere più di un genitore), quindi sarà necessaria una relazione M: M del tipo che hai descritto.

Vari libri "SQL for Smarties" di Joe Celko offre una buona panoramica delle tecniche per l'implementazione e l'interrogazione di strutture gerarchiche e grafiche in SQL. Queste sono di gran lunga la migliore risorsa sull'argomento che io conosca. Altamente raccomandato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top