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

OrientDB unique index on properties of two connected vertices

我有两个顶点classes V1和V2,都有属性 'id'。 我有一个优势class,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 实例也应该可以无边存在,然后它们在全局范围内应该是唯一的。如果最后一部分做不到,那么第一部分还是有帮助的。

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

更新

我所说的配置/索引的意思是,如果您尝试添加边(就像使用唯一索引来强制两个顶点之间只存在一条边一样),它将被阻止(异常)。

您可以使用

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. 把V2的id属性放在边上,取名为v2id,这样就可以针对out+v2id
  2. 创建唯一索引
  3. 在 class E 的 onBeforeCreate() 上创建一个挂钩(触发器)并进行检查