Я знаю, что могу создать уникальное ограничение для одного свойства с Cypher как CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE
. Но мне было интересно, можно ли создать уникальное ограничение, которое включает в себя несколько свойств. Если да, то как?
Как создать уникальное ограничение, включающее несколько свойств в Neo4J
Ответ 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.