建模依赖于两个节点的关系

时间:2016-07-29 18:51:28

标签: neo4j

我正在通过律师公司评审案例各方对法律案件进行建模我试图在案例上模拟律师派对之间的关系。麻烦的是,我当前的模型没有将关系范围限定为特定案例,也就是说,一旦律师 REPRESENTS 关系派对,然后她始终派对相关联,即使在不相关的案例上也是如此。我知道关系只能有两个节点,所以如何在不创建类似SQL的连接表的情况下对其进行建模?也就是说,我想要这个(即使我不能拥有它):

(Attorney)-[REPRESENTS]->(Party+Case)

这是我的模型的简化草图:

(Attorney {email:, ...})
  -[REPRESENTS]->(Party)
  -[MEMBER_OF]->(Firm)

(Party {name:, ...})
  -[PARTY_IN {role: <plaintiff, defenadant, ...>}]->(Case)

(Firm {email_domain:, ...})

(Case {title:, case_number:, court_house:, ...)

(Judge {name:,...})
  -[PRESIDING_OVER]->(Case)

2 个答案:

答案 0 :(得分:0)

研究中间节点的使用。这不是一个完美的例子,但这可能有助于您思考数据模型。

http://www.markhneedham.com/blog/2013/10/22/neo4j-modelling-hyper-edges-in-a-property-graph/

您的想法是,您可能希望创建一个连接CasePartyAttorney

的关系节点

答案 1 :(得分:0)

好像你可能希望将PARTY_IN角色分解为他们自己的节点。

所以你可能会有这样的事情:

(:Party)-[:PARTY_AS]->(:Defendant)-[:IN]->(:Case)
(:Attorney)-[:REPRESENTS]->(:Defendant)-[:IN]->(:Case)

您可以使用单独的标签:被告,原告等(推荐),或者具有类型字段的更通用(:角色)。

如果您希望查询为您提供案件的当事人和律师,您可以使用以下内容:

MATCH (case:Case)
WHERE case.id = 123
WITH case
MATCH (party:Party)-[:PARTY_AS]->(role)-[:IN]->(case)
WITH party, role
MATCH (attorney:Attorney)-[:REPRESENTS]->(role)
RETURN LABELS(role) AS role, COLLECT(attorney) AS attorneys, party

(在这里使用收集,因为多个律师可能代表案件中的一方)