Comment créer une contrainte unique impliquant plusieurs propriétés dans Neo4J

Je sais que je peux créer une contrainte unique sur une seule propriété avec Cypher comme CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE. Mais je me demandais s'il était possible de créer une contrainte unique qui implique plusieurs propriétés. Si oui, comment?

25
demandé sur cybersam 2014-03-19 10:31:54

3 réponses

Neo4j (2.0.1) ne supporte pas actuellement une contrainte d'unicité qui couvre plusieurs propriétés simultanément.

Cependant, je peux penser à une solution de contournement qui pourrait être acceptable, en fonction de vos cas d'utilisation. Disons que vous voulez que les propriétés a, b et c soient uniques en tant que groupe. Vous pouvez ajouter une propriété supplémentaire, d, qui concatène les valeurs stringifiées de a, b et c, en utilisant le(s) délimiteur (s) approprié (s) pour séparer les sous-chaînes (de sorte que, par exemple, le délimiteur a/b est un caractère qui n'apparaît jamais dans a ou b). Vous pouvez ensuite créer une contrainte d'unicité sur D.

20
répondu cybersam 2014-03-19 08:20:34

À partir de la version 3.3 de neo4j, il existe une contrainte appelée NODE KEY qui peut être utilisée pour l'unicité sur plusieurs propriétés.

De la documentation :

Pour créer une clé de nœud garantissant que tous les nœuds avec une étiquette particulière ont un ensemble de propriétés définies dont la valeur combinée est unique et où toutes les propriétés de l'ensemble sont présentes

Exemple De Requête

CREATE CONSTRAINT ON (n:Person) ASSERT (n.firstname, n.surname) IS NODE KEY
11
répondu pgericson 2017-08-22 08:57:52

À ce jour, neo4j(v3.0.3) ne supporte toujours pas la contrainte unique avec plusieurs propriétés. La raison derrière cela est: 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
répondu piyush121 2016-09-18 16:16:00