Подтвердить что ты не робот

Как создать уникальное ограничение, включающее несколько свойств в Neo4J

Я знаю, что могу создать уникальное ограничение для одного свойства с Cypher как CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE. Но мне было интересно, можно ли создать уникальное ограничение, которое включает в себя несколько свойств. Если да, то как?

4b9b3361

Ответ 1

neo4j (2.0.1) в настоящее время не поддерживает ограничение уникальности, которое одновременно охватывает несколько свойств.

Однако я могу подумать об обходном пути, который может быть приемлемым, в зависимости от ваших вариантов использования. Предположим, вы хотите, чтобы свойства a, b и c были уникальными в качестве группы. Вы можете добавить дополнительное свойство d, которое объединяет строгие значения a, b и c, используя соответствующие разделители для разделения подстрок (например, разделитель a/b является символом, который никогда не появляется в пунктах a или b). Затем вы можете создать ограничение единственности на d.

Ответ 2

Как и в версии neo4j версии 3.3, существует ограничение, называемое NODE KEY, которое может использоваться для уникальности множества свойств.

В документации :

Создать Node ключ, гарантирующий, что все узлы с определенной меткой имеют набор определенных свойств, объединенное значение которых уникально и где все свойства в наборе присутствуют

Пример запроса

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

Ответ 3

В настоящее время 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.