如何防止在 OrientDB 中的相同顶点之间创建重复边?

How to prevent creating duplicates of edges between the same vertices in OrientDB?

我有顶点 "Person" 和边 "Knows"。这是我如何创建它的 SQL 示例。

CREATE CLASS Person EXTENDS V;
CREATE PROPERTY Person.name STRING;

CREATE CLASS Knows EXTENDS E;

INSERT INTO Person (name) VALUES("John")
INSERT INTO Person (name) VALUES("Ann")
INSERT INTO Person (name) VALUES("Harry")

当我在 John knows -> Ann 之间创建边缘时 通过

CREATE EDGE Knows FROM (SELECT FROM Person WHERE name = "John") 
TO (SELECT FROM PERSON WHERE name = "Ann") 

它创建它并且一切正常。

但是当我不小心多次创建边缘时出现问题。

对于关系 "Knows" 重复是多余的,但对于其他一些关系,如 "Visited" (John [Visited ->] New York) 如果边 "Visited" 有 属性 "date".

我试图通过向边 "Knows" 添加唯一索引来解决它,但之后我只能在一对顶点之间创建边。

在我看来,在创建之前检查每一次边缘是否存在也不是一个好主意。

如何正确解决这个问题?

直接的解决方案是在 EdgeClass[out, in] 上创建一个索引。为此,您还必须为边缘定义模式 class:

CREATE CLASS Knows EXTENDS E
CREATE PROPERTY Knows.out LINK Person
CREATE PROPERTY Knows.`in` LINK Person
CREATE INDEX Knows.out_in ON Knows (out, in) UNIQUE