2008-11-27 53 views
7

我在網上發現了一些文章,提供瞭如何在SQL中爲各種類型的圖形(特別是DAG)建模的例子,但是它們看起來都非常複雜,因爲它們建模的相對簡單。如何在SQL中對貝葉斯網絡或更一般的有向加權圖進行建模?

有沒有一個最好的/標準的方式來做到這一點?我目前的想法是這樣的:

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 
) 

這有什麼問題嗎?任何人都知道更好(或許更強大)的方式?

回答

8

這將是一個相當合理的方法。雖然一些系統(如Oracle或SQL Server)具有遞歸查詢功能,但SQL並沒有很好地執行遞歸結構。

雖然您可能會發現一種更適合特定搜索類型的結構,但我不認爲在一般情況下您會發現明顯更好的結構。如果你的應用程序的需求受限於這種方式,這樣的優化可能會給你帶來好處。

由於貝葉斯網絡是一個Directed Acyclic Graph(DAG),純粹遞歸的父 - 子關係不足以模擬網絡(即一個節點可以有多個父節點),因此M:M類型的關係你所描述的將是必要的。

Joe Celko的各種'SQL for Smarties'書籍可以很好地概述在SQL中實現和查詢分層結構和圖結構的技術。這些是迄今爲止我所知道的最好的資源。 強烈推薦。