推荐语义网络节点的SQL数据模型?

时间:2009-05-03 15:48:58

标签: sql

我们正在为联邦语义网络(RDF,Protege等)构建基于RDBMS的网站。这基本上是一个庞大的节点集合,每个节点都有一个大的,不确定的命名关系集(和来自其他节点)。

我的第一个想法是所有节点(名称,描述等)的单个表,以及每个命名关系的一个表。那里有更好的想法吗?

5 个答案:

答案 0 :(得分:1)

进一步思考,总共可能有两个表,一个用于节点(id,name,description),另一个用于关系(id,name,description,from,to), 其中from和两个是节点表(int)中的id。还在正确的轨道上?

答案 1 :(得分:1)

您可以通过为每个关系创建2行来优化性能。

假设您有一个表项和一个表关系,并且Person A与Person B有关系.Contace表有一个左右列,都指向Items。现在,如果此关系只有一行,并且您想要某个Item的所有关系,那么您将看到如下所示的查询:

SELECT * FROM Relations WHERE LeftItemId = @ItemId OR RightItemId = @ItemId

此查询中的OR会破坏您的表现!如果要复制行并切换关系(左边变为右边,反之亦然),查询将如下所示:

SELECT * FROM Relations WHERE LeftItemId = @ItemId 

使用正确的索引,这个将会非常快。

答案 2 :(得分:0)

不,那没关系。注意主键和索引,以便性能良好。

答案 3 :(得分:0)

如果节点没有单个表,则必须定义许多关系表。每个新节点类型都需要一个新的关系表,其中每个旧节点类型。这可能会很快失控。

所以单个表听起来最好。如果您需要某些节点类型的其他字段,则可以始终使用1:1关系对其进行扩展。

答案 4 :(得分:0)

如果您使用的是sql server 2008,您可能需要考虑新的HierarchyID datatype来存储您的层次结构。它已针对存储进行了优化。