两个连接顶点属性的 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")
希望对您有所帮助。
我只看到两种方法:
- 把V2的
id
属性放在边上,取名为v2id
,这样就可以针对out
+v2id
创建唯一索引
- 在 class E 的
onBeforeCreate()
上创建一个挂钩(触发器)并进行检查
我有两个顶点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")
希望对您有所帮助。
我只看到两种方法:
- 把V2的
id
属性放在边上,取名为v2id
,这样就可以针对out
+v2id
创建唯一索引
- 在 class E 的
onBeforeCreate()
上创建一个挂钩(触发器)并进行检查