2008-11-27 31 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中实现和查询分层结构和图结构的技术。这些是迄今为止我所知道的最好的资源。 强烈推荐。