我是一个新手 Neo4j 用户,正在尝试使用 Neo4j Milestone 2.0.0-M03 进行学习。我正在尝试创建唯一的节点,而不是通过它们拥有的属性,而是通过它们拥有的关系。
我创建了一个数据库:
MERGE (p:Person { name : 'Bill' })
MERGE (p:Person { name : 'Ben' })
MERGE (p:Person { name : 'Bob' })
然后,我与成员 Bill 和 Ben 创建了一个“团队”:
MATCH bill:Person, ben:Person
WHERE bill.name='Bill' AND ben.name='Ben'
CREATE UNIQUE t:Team-[:HAS_MEMBER]->bill, t:Team-[:HAS_MEMBER]->ben
然后,我想与成员 Bill 和 Bob 创建第二个团队,但是执行与上述相同的操作,即:
MATCH bill:Person, bob:Person
WHERE bill.name='Bill' AND bob.name='Bob'
CREATE UNIQUE t:Team-[:HAS_MEMBER]->bill, t:Team-[:HAS_MEMBER]->bob
这使得将 Bob 添加到现有团队的变化最小。因此,我有一个包含 Bill、Ben 和 Bob 的团队,但我想要两个团队,它们的成员都是独一无二的。
鉴于“CREATE UNIQUE”的语义,我很欣赏这是正确的。不幸的是,我无法找出正确的语句来创建由其拥有的成员唯一标识的第二个团队节点。
我不希望将属性放在区分它们的团队上,我希望团队节点通过它们的关系而不是它们的属性来唯一标识。
我可以创建一个双重关系'OMITS_MEMBER',当且仅当HAS_MEMBER 不存在时,它存在于团队和个人之间。这似乎增加了一个不需要的数据库约束。
鉴于我可以在没有团队属性或双重关系的情况下用图论数学表达这种事情,我相信开发 Neo4j 的聪明人有办法做到这一点。我正在努力弄清楚。