简体   繁体   English

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

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

I have vertex "Person" and edge "Knows". 我有顶点“人物”和边缘“知道”。 Here is SQL example of how I created it. 这是我如何创建它的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")

When I create an edge between John knows -> Ann by 当我在约翰之间创造一个优势时 - > Ann by

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

it creates it and every thing is ok. 它创造了它,每件事都没问题。

But problem occurs when I accidentially create edge several times. 但是当我意外地多次创建边缘时会出现问题。

For the relationship "Knows" duplicates are redundant, but for some other ones like "Visited" (John [Visited ->] New York) duplication of edges are desired feature if edge "Visited" has property "date". 对于关系“知道”重复是多余的,但对于其他一些如“访问”(John [Visited - >] New York),如果边缘“已访问”具有属性“日期”,则边缘的重复是期望的特征。

I tried to solve it by adding unique index to edge "Knows", but after that I am able to create edge between only one pair of vertices. 我试图通过向边缘“Knows”添加唯一索引来解决它,但之后我只能在一对顶点之间创建边缘。

And checking every time edge for existence before creation doesn't seem to me a good idea as well. 并且在创作之前检查每一次存在的边缘对我来说似乎也不是一个好主意。

How to solve this in correct way? 如何以正确的方式解决这个问题?

The straight forward solution is to create an index on EdgeClass[out, in]. 直接的解决方案是在EdgeClass [out,in]上创建索引。 To do this, you also have to define the schema for the edge 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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM