OrientDB对两个连接顶点的属性的唯一索引

时间:2016-05-23 13:03:09

标签: orientdb

我有两个顶点类V1和V2,都有属性' id'。 我有一个边缘类,E。

V1的id属性是唯一索引,因此所有V1都具有唯一ID。 现在我希望连接到某个V1实例的所有V2实例都具有唯一ID。 所以:

好(并且需要工作)

V1(id:"A") ---- E ----> V2(id:"a")
V1(id:"A") ---- E ----> V2(id:"b")
V1(id:"B") ---- E ----> V2(id:"a")
V1(id:"B") ---- E ----> V2(id:"b")

不行

V1(id:"A") ---- E ----> V2(id:"a")
V1(id:"A") ---- E ----> V2(id:"a")

优选地,作为附加,V2实例也可以在没有边缘的情况下存在,并且它们在全局范围内应该是唯一的。如果不能使用最后一部分,那么第一部分无论如何都是有用的。

这可能是通过数据库配置/索引(在边缘或顶点上)还是我必须在应用程序中强制执行它?

更新

我的配置/索引的意思是,如果你试图添加边缘就会被阻止(例外)(就像使用唯一索引来强制在两个顶点之间只存在一条边缘时一样)。

2 个答案:

答案 0 :(得分:1)

您可以使用

update e set out=(select from v1 where id="a"), in=(select from v2 where id="a") upsert where out=(select from v1 where id="a") and in=(select from v2 where id="a")

希望它有所帮助。

答案 1 :(得分:1)

我只看到两种方法:

  1. 将V2 id属性放在边缘并将其命名为v2id,这样您就可以针对out + v2id
  2. 创建唯一索引
  3. 在E级onBeforeCreate()上创建一个钩子(触发器)并执行检查