【发布时间】:2018-01-17 17:29:03
【问题描述】:
这是一个设计问题,需要一个关于性能和维护注意事项的指南。
标签是否可以指示与其他节点/标签的关系?
Approach-1:
create (n:Actor:Director {name:'Clint Eastwood'})
create (n:Movie {name:'Gran Torino'})
MATCH (a:Actor {name:'Clint Eastwood'}), (m:Movie {name:'Gran Torino'})
CREATE (a)-[:ACTED_IN]->(m)
在这种情况下,演员/导演实际上是人与电影节点的关系。那么如果该人在电影中既是演员又是导演,是否应该将其创建为与电影节点具有两种关系的 Person 节点?
Approach-2:
create (n:Person {name:'Clint Eastwood'})
create (n:Movie {name:'Gran Torino'})
MATCH (p:Person {name:'Clint Eastwood'}), (m:Movie {name:'Gran Torino'})
CREATE (p)-[:ACTOR]->(m)
MATCH (p:Person {name:'Clint Eastwood'}), (m:Movie {name:'Gran Torino'})
CREATE (p)-[:DIRECTOR]->(m)
Approach-2 似乎在工程方面更好,但 Neo4J 示例文档也参考 Approach-1(参考:https://neo4j.com/developer/kb/how-do-i-report-on-nodes-with-multiple-labels/)
那么从长远来看,哪一个更清洁、更好、更高效?
【问题讨论】:
标签: neo4j graph-databases