我有两个顶点类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 实例最好也可以在没有边缘的情况下存在,然后它们在全局范围内应该是唯一的。如果最后一部分是不可能的,那么第一部分无论如何都是有帮助的。
这是否可以通过数据库配置/索引(在边或顶点上)来实现,还是我必须在应用程序中强制执行它?
更新
我所说的配置/索引是指,如果您尝试添加边缘,则会阻止它(例外)(就像使用唯一索引强制两个顶点之间仅存在一条边缘一样)。
我只看到两种方法可以做到这一点:
- 将 V2
id
属性放在边缘并调用它v2id
,以便您可以针对out
+ 创建唯一的索引v2id
- 在 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")
希望对您有所帮助。