简体   繁体   中英

Modeling a relationship that relies on two nodes

I'm modeling legal cases with Attorneys , Firms , Judges , Cases and Parties and I'm trying to model the relationship between an Attorney and a Party on a Case . The trouble is that my current model doesn't scope the relationship to a particular case , that is, once an Attorney has a REPRESENTS relationship to a Party , then she is always associated with that Party , even on unrelated Cases . I know that relationships can only have two nodes on them, so how do I model this without creating a SQL-like join table? That is, I want this (even though I can't have it):

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

Here's a simplified sketch of my models:

(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)

Look into the use of intermediate nodes. Not a perfect example, but this might help you think through the data model.

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

The idea is that you might want to create a relationship node that connects the Case , Party , and Attorney

Seems like you may want to break out your PARTY_IN roles as their own nodes.

So you might have something like this:

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

You can either use separate labels for :Defendant, :Plaintiff, etc (recommended), or have a more generalized (:Role) with a type field.

If you wanted a query to give you the parties and attorneys for a case, you might use something like:

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

(using collect here as multiple attorneys may represent a party in a case)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM