Uma restrição permite que você coloque restrições sobre os dados que podem ser inseridos em um nó ou um relacionamento.
As restrições ajudam a reforçar a integridade dos dados, porque impedem que os usuários insiram o tipo errado de dados. Se alguém tentar inserir o tipo errado de dados quando uma restrição for aplicada, receberá uma mensagem de erro.
Tipos de restrição
No Neo4j, você pode criar singularidade restrições e existência de propriedade restrições.
- Restrição de exclusividade
- Especifica que a propriedade deve conter um valor exclusivo (ou seja, não há dois nós com um Artista rótulo pode compartilhar um valor para o Nome propriedade.)
- Restrição de existência de propriedade
- Assegura que existe uma propriedade para todos os nós com um rótulo específico ou para todos os relacionamentos com um tipo específico. As restrições de existência de propriedade estão disponíveis apenas no Neo4j Enterprise Edition.
Criar uma restrição de exclusividade
Para criar uma restrição de exclusividade no Neo4j, use o
CREATE CONSTRAINT ON
demonstração. Assim:CREATE CONSTRAINT ON (a:Artist) ASSERT a.Name IS UNIQUE
No exemplo acima, criamos uma singularidade restrição no Nome propriedade de todos os nós com o Artista rótulo.
Quando a instrução for bem-sucedida, a seguinte mensagem será exibida:
Quando você cria uma restrição, o Neo4j cria um índice. Cypher usará esse índice para pesquisas assim como outros índices.
Portanto, não há necessidade de criar um índice separado. Na verdade, se você tentar criar uma restrição quando já houver um índice, receberá um erro.
Visualizar a restrição
Restrições (e índices) tornam-se parte do esquema de banco de dados (opcional).
Podemos visualizar a restrição que acabamos de criar usando o
:schema
comando. Assim::schema
Você verá a restrição recém-criada, bem como o índice que foi criado com ela. Também podemos ver o índice que foi criado anteriormente:
Testar a restrição
Você pode testar se a restrição realmente funciona tentando criar o mesmo artista duas vezes.
Execute a seguinte instrução duas vezes:
CREATE (a:Artist {Name: "Joe Satriani"}) RETURN a
Na primeira vez que você executá-lo, o nó será criado. Na segunda vez que você executá-lo, você deverá receber a seguinte mensagem de erro:
Restrições de existência de propriedade
As restrições de existência de propriedade podem ser usadas para garantir que todos os nós com um determinado rótulo tenham uma determinada propriedade. Por exemplo, você pode especificar que todos os nós rotulados com Artista deve conter um Nome propriedade.
Para criar uma restrição de existência de propriedade, use o
ASSERT exists(variable.propertyName)
sintaxe. Assim:
CREATE CONSTRAINT ON (a.Artist) ASSERT exists(a.Name)
Observe que as restrições de existência de propriedade estão disponíveis apenas no Neo4j Enterprise Edition.