关系数据库经常用于存储各种风格的图形(树,有向图,无向图,......)。
为什么然后没有主要的DBMS(Microsoft,MySql,Oracle,PostgreSQL,SqlLite,只是按字母顺序命名)包括库支持将关系视为图形?
一些理想的功能,例如:
在数据库之外构建对其中一些内容的支持很复杂,因为(除其他原因外):
这不是一个修辞问题,我实际上想知道是否有有趣的技术(或历史)原因。
答案 0 :(得分:2)
我曾在一个research group工作过,感兴趣的是在RDF(S)数据的数据库中,它基本上被标记为图形,或三元组[subject,predicate,object],它们基本上是图形边缘:[sourceNode,edgeLabel,targetNode]。
要问的问题是,要了解问题的难度:您要为标记图构建哪种指数?您拥有以利用常见的“属性”(每个“谓词”是主题的属性,具有对象的值),并相应地索引边缘,因此您可以快速查找“是否有”在值大于18“的人物上称为”hasAge“的边缘。
为了说明,这里有一个简单的方法,它是模式遗忘的(并且与传统数据库研究的方向相反,它非常一致地认为模式好有)。它完全忽略了任何架构信息(this paper提供了有用的上下文)。只需将所有内容存储在三个大表中(s:subject,p:predicate,o:object):
这三个足以回答任何有效评估任何查询(最多)一个主题,(最多)一个谓词,和(最多)一个对象(即(s, *, *)
形式的查询,{{1 }},(*, p, *)
,(*, *, o)
,(s, p, *)
,(s, *, o)
,(*, p, o)
)。复杂查询虽然包含许多“路径表达式”(即您描述的数据,您可以找到满足某些条件的某些路径),但每个路径都转换为其中一个(大!)表的自连接,而不是所有这些都是有效的,这是一个问题。
那里,口袋里有一个简单的图形数据库。 :)
结论,这是积极研究的领域。我不知道目前的艺术水平,但我看到像AllegroGraph这样的产品和其他产品都声称效果非常好。
答案 1 :(得分:0)
Oracle支持图形功能(Oracle Locator / Oracle Spatial)和语义Web功能。
答案 2 :(得分:0)
我怀疑你的问题包含了自己答案的开头。
对于通用数据库,您列出的常用功能通常根本不需要。是的,图形操作肯定需要它们,但很少用于客户计费。当然,关系数据库可以在表中存储图形,但图形操作超出了我见过的任何SQL版本的能力。
您编写构建对数据库之外的某些内容的支持是复杂的。是的,这就是为什么我们都得到这么多的报酬。但是,将这些内容的支持构建到数据库中会不会那么复杂呢?