Neo4j:建立联系人和用户之间关系的正确方法

时间:2013-08-18 08:09:53

标签: neo4j

这是我的场景(使用完全虚构的应用程序):

  • Joe与'Contests R Us'签约,帮助用户为他们的业务创建新的竞赛
  • Joe让人们亲自报名参加竞赛(有些人不知道如何使用电脑)
  • Joe然后使用'Contests R Us'为每个注册并填写其信息(名字,姓氏,电话)等的人创建一个新contact。这是来自的人将赢得胜利者。
  • 有些亲自注册的人想检查他们是否已经赢了,所以在'Contests R Us'中创建一个新的用户帐户

此时,我想将此新用户连接到Joe创建的现有contact(基于电子邮件地址),并允许用户在需要时更新联系信息。另一个问题是该用户可能已经注册了与不同公司的竞赛,因此可能有N contact个对象我现在想要合并到用户拥有的单个联系人对象中。

以下是我在Cypher中描述的模型(由不同的人创建的2个联系人,_3和_6,然后用匹配的电子邮件创建用户,_1):

CREATE (_1:User { email:"john@bar.com", name:"Jack" }),
       (_2:Phone { no:"555-5555" }),
       (_3:Contact { name:"John", email:"john@bar.com" }),
       (_4:User { email:"david@bar.com",name:"David" }),
       (_5:Phone { no:"555-5555" }),
       (_6:Contact { name:"John", email:"john@bar.com" }),
       (_7:User { email:"fred@bar.com",name:"Fred" }),
        _3-[:primary_phone]->_2,
        _6-[:primary_phone]->_5,
        _4-[:created]->_3,
        _7-[:created]->_6

有关处理这种情况的最佳方法的任何想法?我试图弄清楚大卫和弗雷德如何知道他们创造的contact,因为约翰实际上想要被称为杰克。

我应该删除contact个节点并将所有关系移动到新创建的user节点吗?我应该只添加user节点与所有现有contact节点之间的关系吗?

创建用户后,所有未来的关系将直接发送给用户。我只需要支持即使指定的用户尚未注册(或从未注册)仍然需要工作的场景。

谢谢!

2 个答案:

答案 0 :(得分:1)

我现在要去寻找新的关系SAME_AS:http://console.neo4j.org/r/iangl3

  

我应该删除联系节点并将所有关系移动到   新创建的用户节点?我应该只是添加一个关系   用户节点到所有现有的联系节点?

我会选择最后一个 - 您应该从用户节点添加所有现有联系节点的关系。这样您就不会失去用户联系人列表中别名的价值,然后您可以让用户选择将自己的联系人命名为他们喜欢的内容。

答案 1 :(得分:0)

当电话节点可能只是一个User和一个Contact节点,电话信息存储为属性时,似乎电话节点不必要地复杂化。这样您就不必担心为每个联系人更新多个记录。

你的约翰> Jack场景应该作为Contact节点上的note属性处理。