CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE
のようなCypherを使用して単一のプロパティに一意の制約を作成できることはわかっています。しかし、複数のプロパティを含む一意の制約を作成できるかどうか疑問に思いました。もしそうなら、どのように?
neo4j(2.0.1)は現在、複数のプロパティを同時にカバーする一意性制約をサポートしていません。
ただし、ユースケースによっては、許容できる回避策を考えることができます。プロパティa、b、およびcをグループとして一意にする必要があるとします。適切な区切り文字を使用して部分文字列を区切ることにより、a、b、およびcの文字列化された値を連結する追加のプロパティdを追加できます(たとえば、a/b区切り文字は決して表示されない文字です)。 aまたはb)で。次に、dに一意性制約を作成できます。
Neo4jバージョン3.3の時点で、NODE KEY
と呼ばれる制約があり、複数のプロパティ間での一意性に使用できます。
ドキュメント から:
Node Keyを作成するには、特定のラベルを持つすべてのノードに、結合された値が一意であり、セット内のすべてのプロパティが存在する定義済みプロパティのセットがあることを確認します
クエリの例
CREATE CONSTRAINT ON (n:Person) ASSERT (n.firstname, n.surname) IS NODE KEY
現在のところ、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.