Is it possible to constraint edge multiplicity in Neo4j / OrientDB?

妖精的绣舞 提交于 2019-12-10 13:09:59

问题


I was wondering whether Neo4j and OrientDB provide the possibility of defining constraints in terms of multiplicity for specific edge types?


回答1:


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

You can also set the minimum with:

ALTER PROPERTY Person.out_workFor MIN 1

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




回答2:


For Neo4j

What do you want to do happen when the constraint is violated? Exception & Rollback or somehow merge?

For 1:1 cardinality there is merge

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

For higher cardinality constraints, you can either go with a framework that supports meta-models and schema like structr.org or sylvadb.

Or you can set-up a small tx-event handler that checks your cardinalities and raises an exception if you violate the constraints.

I wanted to write up a blog post about it anyway, so stay tuned.



来源:https://stackoverflow.com/questions/26274362/is-it-possible-to-constraint-edge-multiplicity-in-neo4j-orientdb

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!