我知道我可以使用Cypher在单个属性上创建一个唯一约束CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE.但我想知道是否有可能创建一个涉及多个属性的唯一约束.如果是这样,怎么样?
cyb*_*sam 25
neo4j(2.0.1)目前不支持同时涵盖多个属性的唯一性约束.
但是,根据您的使用案例,我可以考虑可以接受的解决方法.假设您希望属性a,b和c作为一个组唯一.您可以添加一个额外的属性d,它连接a,b和c的字符串化值,使用适当的分隔符分隔子字符串(例如,a/b分隔符是一个永远不会出现的字符在a或b)中.然后,您可以在d上创建唯一性约束.
pge*_*son 24
从neo4j版本3.3开始,有一个约束NODE KEY,可以用于跨多个属性的唯一性.
从文档:
创建节点密钥,确保具有特定标签的所有节点都具有一组已定义的属性,这些属性的组合值是唯一的,并且集合中的所有属性都存在
示例查询
CREATE CONSTRAINT ON (n:Person) ASSERT (n.firstname, n.surname) IS NODE KEY
Run Code Online (Sandbox Code Playgroud)
到目前为止,neo4j(v3.0.3)仍不支持具有多个属性的唯一约束。其背后的原因是:
When a unique constraint is created it also creates an index on it and as indexes only allow one property, thus constraints can only be applied on one index.