Frage Wie modelliert man ein Bayes-Netzwerk oder, allgemeiner, einen gerichteten gewichteten Graph in SQL?


Ich habe ein paar Artikel online gefunden, die Beispiele für das Modellieren von Diagrammen verschiedener Art (insbesondere DAGs) in SQL bereitstellen, aber alle schienen enorm komplex zu sein, angesichts der relativen Einfachheit dessen, was sie modellieren.

Gibt es einen bestmöglichen Weg? Mein gegenwärtiges Denken ist in etwa so:

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
) 

Ist da etwas nicht in Ordnung? Wer kennt einen besseren (vielleicht robusteren) Weg?


7
2017-11-27 10:51


Ursprung


Antworten:


Dies wäre ein ziemlich vernünftiger Ansatz. SQL macht rekursive Strukturen nicht wirklich gut, obwohl einige Systeme wie Oracle oder SQL Server eine rekursive Abfragefunktion haben.

Obwohl Sie vielleicht eine Struktur finden, die für bestimmte Sucharten besser funktioniert, glaube ich nicht, dass Sie im allgemeinen Fall eine wesentlich bessere Struktur finden werden. Wenn die Anforderungen Ihrer Anwendung auf diese Weise begrenzt sind, kann eine solche Optimierung Ihnen Vorteile bringen.

Wie ein bayesianisches Netzwerk ist ein Directed Azyklische Grafik (DAG) reicht eine rein rekursive Eltern-Kind-Beziehung nicht aus, um das Netzwerk zu modellieren (d. H. Ein Knoten kann mehr als ein Elternteil haben), so dass eine M: M-Beziehung des von Ihnen beschriebenen Typs notwendig ist.

Verschiedene 'SQL for Smarties' Bücher von Joe Celko geben Sie einen guten Überblick über Techniken zum Implementieren und Abfragen von hierarchischen Strukturen und Graphen in SQL. Dies sind bei weitem die besten Quellen zu dem Thema, das ich kenne. Sehr empfehlenswert.


8
2017-11-27 11:03