2016-07-04 3 views
2

Если мы хотим, чтобы обеспечить соблюдение ограничения, что каждый пользователь будет иметь уникальный адрес, связанный с ними, мы могли бы написать:Уникального ограничения по коллекциям на узлах

CREATE CONSTRAINT ON (X:User) ASSERT X.email IS UNIQUE 

Рассмотрим случая, когда адрес электронной почты являются коллекциями, но нам все еще нужно иметь ограничение уникальности, так что адрес электронной почты появляется только один раз в коллекции User.username для всех пользователей. Другими словами, следующее никогда не должно произойти:

(a:User {username: "user1234", email: ["[email protected]", "[email protected]"]) 
(b:User {username: "someperson", email: ["[email protected]", "[email protected]"]) 

так [email protected] появляется на обоих a.email и b.email.

Есть ли способ сделать это в Neo4j, и если да, то как?

ответ

1

Необходимо сохранить адреса электронной почты в коллекции на узле пользователя? Было бы целесообразнее использовать: узлы EmailAddress с уникальным ограничением на свойство электронной почты? Пользователи могут иметь отношения [: HasEmail] к узлам EmailAddress, которые предоставят вам отношения «один ко многим», похожие на коллекции.

Незначительная часть, поэтому убедитесь, что электронная почта, сохраняющая/создающая/изменяющая логика, случайно не связывает нескольких пользователей с одним узлом EmailAddress. Вероятно, вы захотите использовать CREATE явно при создании узла EmailAddress (который может выйти из строя из-за уникального ограничения свойства) вместо MERGE, чтобы он не соответствовал уже созданному адресу электронной почты.

Смежные вопросы