是否有可能限制Neo4j/OrientDB中的边缘多重性?

ppa*_*eja 6 multiplicity neo4j nosql graph-databases orientdb

我想知道Neo4j和OrientDB是否提供了根据特定边缘类型的多重性定义约束的可能性?

Lvc*_*vca 6

For OrientDB

You can set multiplicity on out/in collection per label. Example to set maximum 1 edges from Person to Company if the edge's label is "workFor":

ALTER PROPERTY Person.out_workFor NOT NULL
ALTER PROPERTY Person.out_workFor MAX 1
Run Code Online (Sandbox Code Playgroud)

You can also set the minimum with:

ALTER PROPERTY Person.out_workFor MIN 1
Run Code Online (Sandbox Code Playgroud)

In this way with min & max it's mandatory having one and only one relationship to Company.


Mic*_*ger -1

对于 Neo4j

当违反约束时您想要做什么?异常和回滚或以某种方式合并?

对于 1:1 基数,存在合并

MATCH (p:Person {name:"Pablo"})
MATCH (c:Company {name:"Era7"})
MERGE (p)-[:WORKS_FOR]->(c);
Run Code Online (Sandbox Code Playgroud)

对于更高的基数约束,您可以使用支持元模型和模式的框架,例如structr.orgsylvadb

或者,您可以设置一个小型 tx 事件处理程序来检查您的基数,并在违反约束时引发异常。

无论如何,我想写一篇关于它的博客文章,敬请期待。