如何在图形数据库(如OrientDB)中确定顶点间边的方向。

问题描述 投票:0回答:2

在OrientDB这样的图数据库中,我们如何知道一个边是out()去还是in()来? 我知道边作为顶点之间的链接(这和RDMS中表与表之间的关系是一样的),但是我们如何确定方向。例如,我有一些顶点为讲师和课程,这里,我想有一个(1)讲师到许多课程,即一对多的关系。那么讲师和课程之间的边的方向是什么,是in()到讲师那里还是out()从讲师那里去,我的意思是如何使用 "select in()from lecturer "或select out()from lecturer "来写查询?谢谢。

orientdb graph-databases
2个回答
0
投票

边缘的方向纯粹与域有关,并不影响遍历性能(即从一个顶点开始,你可以遍历传入的边缘,其性能与传出的边缘完全相同)。

重要的是以一种有意义的方式定义边缘 "名称",使边缘方向明确。

我试着用一个例子来说明一下

假设你有两个顶点类,人和车。假设你想在这两个类中创建一个关系,来表示所有权(即:一个人拥有一辆车)。

考虑以下两种方式来表示这种关系。

Person -Owns-> Car

Person <-BelongsTo- Car

正如你所看到的,这两个都很清晰,很好地代表了领域。

当然你有无限的选择来选择边缘名(顺便说一句,动词通常是一个非常好的选择),所以你可以选择 "所有权 "这样的东西。这将是一个绝对不好的选择,因为它不能使方向明确,例如。

Person -Ownership-> Car

抑或是

Person <-Ownership- Car

想象一下,几个月后你不用这个模式了,还要对这个模式进行查询,有几十个关系,语义不清晰。你就知道问题所在了...

说到底,这只是一个模型清晰程度的问题。这是人的问题,不是技术问题。

希望能帮到你


-1
投票

不定向与定向边缘

不定向。

A-(边缘)-B

A可以穿越到B,B也可以穿越到A。

优点 在处理非定向(对称)或双向关系时,简单。 例如:"A friend_of B" ⇔ "B friend_of A "A friend_of B" ⇔ "B friend_of A"

缺点 不带方向性信息。

定向边缘

A-(边缘)-> B

A可以遍历到B,但B不能遍历到A

优点:节省记忆,正确描述方向限制关系 节省记忆,正确描述方向限制关系 例子: "A parent_of B" ⇏ "B parent_of A" 。

缺点。 不能从目标回溯到源头。

关于你的问题--如果是我,我会为你的用例选择不定向的,因为我很可能会想要两个方向。

© www.soinside.com 2019 - 2024. All rights reserved.