13.2. Ограничения
- 13.2.1 Создание ограничения уникальности
- 13.2.2 Удаление ограничения уникальности
- 13.2.3 Создание узла, который согласуется с ограничениями
- 13.2.4 Создание узла, который нарушает ограничения
Neo4j помогает обеспечить целостность данных при использовании ограничений.
Вы можете использовать ограничения уникальности, чтобы гарантировать уникальность значений свойств для всех узлов с конкретной меткой. Ограничения уникальности не означают, что все узлы должны иметь уникальное значение свойств – узлы без свойства не подчиняются этому правилу.
Помните, что добавление ограничений является атомарной операций, которая может потребовать времени – все существующие данные должны быть просканированы, прежде чем Neo4j сможет «включить» ограничение.
Вы можете иметь несколько ограничений уникальности для данной метки.
Отметим, что добавление ограничения уникальности на свойство будет также добавлять индекс на это свойство, поэтому вы не можете добавить такой индекс отдельно. Cypher будет использовать этот индекс для поиска точно также, как и другие индексы. Если вы удалите ограничение, но захотите сохранить индекс на этом свойстве, вы должны будете создать индекс.
13.2.1 Создание ограничения уникальности
Чтобы создать ограничение, которое будет гарантировать, что ваша база данных никогда не будет содержать более одного узла с конкретной меткой и одним значением свойства, используйте синтаксис IS UNIQUE.
Запрос
CREATE CONSTRAINT ON (book:Book) ASSERT book.isbn IS UNIQUE
Таблица 13.4 Результат
Constraints added: 1 |
---|
(пустой результат) |
13.2.2 Удаление ограничения уникальности
Используя DROP CONSTRAINT, вы удаляете ограничение из базы данных.
Запрос
DROP CONSTRAINT ON (book:Book) ASSERT book.isbn IS UNIQUE
Таблица 13.5 Результат
Constraints removed: 1 |
---|
(пустой результат) |
13.2.3 Создание узла, который согласуется с ограничениями
Создадим узел Book со значением isbn, которого ещё нет в базе данных.
Запрос
CREATE (book:Book { isbn: '1449356265', title: 'Graph Databases' })
Таблица 13.6 Результат
Nodes created: 1 |
---|
Properties set: 2 |
Labels added: 1 |
(пустой результат) |
13.2.4. Создание узла, который нарушает ограничение
Создадим узел Book, который имеет значение isbn, уже существующее в базе данных.
Запрос
CREATE (book:Book { isbn: '1449356265', title: 'Graph Databases' })
Сообщение об ошибке
Узел 0 уже существует с меткой Book и свойством "isbn"=[1449356265]