如何防止在 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
我有顶点 "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