我在网上发现了一些文章,提供了如何在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 )
那有什么不对吗?任何人都知道更好(更强大,也许)的方式?
这将是一个非常合理的方法.尽管某些系统(如Oracle或SQL Server)具有递归查询功能,但SQL并不能很好地执行递归结构.
虽然您可能会发现一种对特定搜索类型更有效的结构,但我认为在一般情况下您不会发现明显更好的结构.如果您的应用程序的要求以这种方式受到限制,那么这样的优化可能会给您带来好处.
由于贝叶斯网络是有向无环图(DAG),纯粹递归的父子关系不足以对网络进行建模(即一个节点可以有多个父节点),因此您的类型为M:M关系所描述的将是必要的.
Joe Celko撰写的各种"SQL for Smarties"书籍很好地概述了在SQL中实现和查询层次结构和图形结构的技术.这些是迄今为止我所知道的最佳资源. 强烈推荐.