I know I can create a unique constraint on a single property with Cypher like CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE
. But I was wondering wheth
neo4j (2.0.1) does not currently support a uniqueness constraint that covers multiple properties simultaneously.
However, I can think of a workaround that might be acceptable, depending on your use cases. Let's say you want properties a, b, and c to be unique as a group. You can add an extra property, d, that concatenates the stringified values of a, b, and c, using appropriate delimiter(s) to separate the substrings (such that, for example, the a/b delimiter is a character that never appears in a or b). You can then create a uniqueness constraint on d.
[UPDATE]
Neo4j 3.3 added support for uniqueness constraints that cover multiple properties, via node key constraints. However, this feature is only available in the Enterprise Edition.
As of now, neo4j(v3.0.3) still does not support unique constraint with multiple properties.
The reason behind this is:
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.
As of neo4j version 3.3 there is a constraint called NODE KEY
which can be used for uniqueness across multiple properties.
From the documentation:
To create a Node Key ensuring that all nodes with a particular label have a set of defined properties whose combined value is unique, and where all properties in the set are present
Example Query
CREATE CONSTRAINT ON (n:Person) ASSERT (n.firstname, n.surname) IS NODE KEY