节点

时间:2016-07-04 16:22:45

标签: neo4j

如果我们想要强制执行约束,即每个用户都有一个与之关联的唯一电子邮件,我们可以写一下:

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

让我们考虑一个电子邮件地址是集合的情况,但我们仍然需要具有唯一性约束,这样,对于所有用户,电子邮件地址只会在User.username集合中出现一次。换句话说,以下情况永远不会发生:

(a:User {username: "user1234", email: ["foo@bar.com", "foo2@bar.com"])
(b:User {username: "someperson", email: ["foo@bar.com", "me@someperson.com"])

因为foo@bar.coma.email b.email出现了ThreadLocal

有没有办法在Neo4j中做到这一点,如果有,怎么做?

1 个答案:

答案 0 :(得分:1)

您必须将电子邮件地址存储在用户节点上的集合中吗?是否更有意义使用:EmailAddress节点对电子邮件属性具有唯一约束?用户可以拥有[:HasEmail]关系:EmailAddress节点,它将为您提供与集合类似的一对多关系。

然后,棘手的部分是确保电子邮件保存/创建/更改逻辑不会意外地将多个用户链接到单个EmailAddress节点。您可能希望在创建EmailAddress节点时显式使用CREATE(由于唯一属性约束可能会失败)而不是MERGE,因此它与已创建的电子邮件地址不匹配。