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?
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.
À 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.
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
À 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.