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

时间:2018-02-03 18:06:59

标签: java sql graph orientdb

我有顶点"人"和边缘"知道"。这是我如何创建它的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知道之间创建边缘时 - >安 通过

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

它创造它并且每件事都没问题。

但是当我意外地多次创造边缘时会出现问题。

对于这种关系" Knows"重复是多余的,但对于其他一些,例如"访问" (John [Visited - >] New York)边缘重复是边缘"访问"拥有财产" date"。

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

在创作之前检查每一次存在的边缘在我看来都不是一个好主意。

如何以正确的方式解决这个问题?

1 个答案:

答案 0 :(得分:5)

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

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