如何确定图形数据库(如 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
想象一下,如果您在几个月不使用此架构后不得不对其进行查询,其中有数十个语义不明确的关系。你看到问题了...
归根结底,只是模型清晰度的问题。这是人的问题,不是技术问题。
希望对你有帮助
我们如何知道一条边是 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
想象一下,如果您在几个月不使用此架构后不得不对其进行查询,其中有数十个语义不明确的关系。你看到问题了...
归根结底,只是模型清晰度的问题。这是人的问题,不是技术问题。
希望对你有帮助