7

我在网上找到了几篇文章,提供了如何在 SQL 中对各种类型的图(尤其是 DAG)进行建模的示例,但鉴于它们所建模的内容相对简单,它们似乎都非常复杂。

是否有这样做的最佳/标准方法?我目前的想法是这样的:

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
) 

这有什么问题吗?任何人都知道更好(也许更强大)的方式?

4

1 回答 1

8

这将是一个相当合理的方法。SQL 并没有真正做好递归结构,尽管 Oracle 或 SQL Server 等一些系统具有递归查询功能。

尽管您可能会找到一种更适合特定搜索类型的结构,但我认为您不会在一般情况下找到明显更好的结构。如果您的应用程序的要求以这种方式受到限制,那么这样的优化可能会给您带来好处。

由于贝叶斯网络是有向无环图(DAG),因此纯递归的父子关系不足以对网络进行建模(即一个节点可以有多个父节点),因此您的类型为 M:M 关系ve 描述将是必要的。

Joe Celko的各种“聪明人的 SQL”书籍很好地概述了在 SQL 中实现和查询层次结构和图形结构的技术。这些是迄今为止我所知道的关于该主题的最佳资源。 强烈推荐。

于 2008-11-27T11:03:48.747 回答