web-dev-qa-db-ja.com

Neo4Jで複数のプロパティを含む一意の制約を作成する方法

CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUEのようなCypherを使用して単一のプロパティに一意の制約を作成できることはわかっています。しかし、複数のプロパティを含む一意の制約を作成できるかどうか疑問に思いました。もしそうなら、どのように?

30
victorx

neo4j(2.0.1)は現在、複数のプロパティを同時にカバーする一意性制約をサポートしていません。

ただし、ユースケースによっては、許容できる回避策を考えることができます。プロパティa、b、およびcをグループとして一意にする必要があるとします。適切な区切り文字を使用して部分文字列を区切ることにより、a、b、およびcの文字列化された値を連結する追加のプロパティdを追加できます(たとえば、a/b区切り文字は決して表示されない文字です)。 aまたはb)で。次に、dに一意性制約を作成できます。

23
cybersam

Neo4jバージョン3.3の時点で、NODE KEYと呼ばれる制約があり、複数のプロパティ間での一意性に使用できます。

ドキュメント から:

Node Keyを作成するには、特定のラベルを持つすべてのノードに、結合された値が一意であり、セット内のすべてのプロパティが存在する定義済みプロパティのセットがあることを確認します

クエリの例

CREATE CONSTRAINT ON (n:Person) ASSERT (n.firstname, n.surname) IS NODE KEY
22
pgericson

現在のところ、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.

5
piyush121