Cómo crear restricciones únicas que involucran múltiples propiedades en Neo4J


Sé que puedo crear una restricción única en una sola propiedad con Cypher como CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE. Pero me preguntaba si es posible crear una restricción única que involucre múltiples propiedades. Si es así, ¿cómo?

Author: cybersam, 2014-03-19

3 answers

Neo4j (2.0.1) actualmente no admite una restricción de unicidad que cubra varias propiedades simultáneamente.

Sin embargo, se me ocurre una solución que podría ser aceptable, dependiendo de sus casos de uso. Digamos que desea que las propiedades a, b y c sean únicas como grupo. Puede agregar una propiedad adicional, d, que concatene los valores stringified de a, b y c, utilizando delimitadores apropiados para separar las subcadenas (de modo que, por ejemplo, el delimitador a / b sea un carácter que nunca aparece en a o b). A continuación, puede crear una restricción de unicidad en d.

 20
Author: cybersam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-19 08:20:34

A partir de la versión 3.3 de neo4j hay una restricción llamada NODE KEY que se puede usar para la unicidad en múltiples propiedades.

De la documentación :

Para crear una Clave de nodo asegurando que todos los nodos con una etiqueta particular tengan un conjunto de propiedades definidas cuyo valor combinado sea único, y donde todas las propiedades del conjunto estén presentes

Consulta de ejemplo

CREATE CONSTRAINT ON (n:Person) ASSERT (n.firstname, n.surname) IS NODE KEY
 11
Author: pgericson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-22 08:57:52

A partir de ahora, neo4j(v3.0.3) todavía no admite restricción única con múltiples propiedades. La razón detrás de esto es: 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.

 4
Author: piyush121,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-18 16:16:00