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 实例最好也可以在没有边缘的情况下存在,然后它们在全局范围内应该是唯一的。如果最后一部分是不可能的,那么第一部分无论如何都是有帮助的。

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

更新

我所说的配置/索引是指,如果您尝试添加边缘,则会阻止它(例外)(就像使用唯一索引强制两个顶点之间仅存在一条边缘一样)。

我只看到两种方法可以做到这一点:

  1. 将 V2 id 属性放在边缘并调用它 v2id ,以便您可以针对 out + 创建唯一的索引v2id
  2. 在 E 类onBeforeCreate()上创建一个钩子(触发器)并进行检查
您可以使用

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")

希望对您有所帮助。

最新更新