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

How to determine the direction of an edge between vertexes in a Graph Database such as OrientDB

我们如何知道一条边是 out() going 还是 in() coming 在像 OrientDB 这样的图形数据库中?我知道边作为顶点之间的链接(这与 RDMS 中表之间的关系相同),但是我们如何确定方向。例如,我有一些讲师和课程的顶点,在这里,我希望有一个 (1) 讲师到许多课程,即一对多关系。那么讲师和课程之间的边缘方向是什么,是 in() 到讲师还是 out() 离开讲师我的意思是如何使用 "select in() from lecturer" 或 [=13= 编写查询] out() 来自讲师?谢谢。

无向与有向边

未定向:

A -(边)- B

A可以遍历到B,B可以遍历到A

优点: 在处理无向(对称)或双向关系时很简单。 示例:"A friend_of B"⇔"B friend_of A"

缺点:不携带方向信息。

有向边

A -(边)-> B

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

优点:节省内存并正确描述方向限制关系 示例:"A parent_of B"⇏"B parent_of A"

缺点: 无法从目标返回到源。

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

边的方向与域完全相关,不影响遍历性能(即从顶点开始,您可以遍历传入边,其性能与传出边完全相同)。

重要的是定义边"name"有意义,这样边的方向就清楚了

我会尝试用一个例子来说明

假设你有两个顶点类:人和车。 假设您想在两者之间创建一种关系,以表示所有权(即一个人拥有一辆汽车)。

考虑这两种表示关系的方式:

Person -Owns-> Car

Person <-BelongsTo- Car

如您所见,两者都很清晰,并且很好地代表了领域。

当然你有无数的选择来选择边缘名称(顺便说一句,动词通常是一个很好的选择),所以你可以选择像 "Ownership" 这样的东西。这绝对是一个糟糕的选择,因为它不会明确方向,例如。

是吗

Person -Ownership-> Car

或者是

Person <-Ownership- Car

想象一下,如果您在几个月不使用此架构后不得不对其进行查询,其中有数十个语义不明确的关系。你看到问题了...

归根结底,只是模型清晰度的问题。这是人的问题,不是技术问题。

希望对你有帮助