这是一个设计问题,需要一个关于性能和维护注意事项的指导。使用标签和关系设计Neo4J数据模型
是否建议标签指示与其他节点/标签的关系?
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)
在这种情况下,Actor/Director实际上是人与Movie节点的关系。那么,如果这个人既是电影中的演员又是导演,那么它是否应该创建为具有与电影节点两种关系的人节点?
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)
方法-2似乎更好的工程明智,然而Neo4j的示例文档还referes接近-1(参照https://neo4j.com/developer/kb/how-do-i-report-on-nodes-with-multiple-labels/)
所以哪一个是清洁器,更好和更有效的,从长远来看?