我知道我可以使用Cypher像CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE
在单个属性上创建一个唯一约束。但我想知道是否有可能创建一个涉及多个属性的唯一约束。如果是这样,怎么样?
答案 0 :(得分:22)
neo4j(2.0.1)目前不支持同时涵盖多个属性的唯一性约束。
但是,根据您的使用案例,我可以考虑可以接受的解决方法。让我们假设您希望属性a,b和c作为一个组是唯一的。您可以添加一个额外的属性d,它连接a,b和c的字符串化值,使用适当的分隔符分隔子字符串(例如,a / b分隔符是一个永远不会出现的字符在a或b)中。然后,您可以在d。
上创建唯一性约束答案 1 :(得分:21)
从neo4j版本3.3开始,有一个名为NODE KEY
的约束,可用于跨多个属性的唯一性。
创建节点密钥以确保具有特定标签的所有节点都具有一组已定义的属性,这些属性的组合值是唯一的,并且该集合中的所有属性都存在
示例查询
CREATE CONSTRAINT ON (n:Person) ASSERT (n.firstname, n.surname) IS NODE KEY
答案 2 :(得分:5)
截至目前,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.