我们正在制作艺术家/音乐/电影及其相互关联的图表。
我们发现可能有两种类型的数据关系组,Simple和Compound。
1)简单数据示例
(Bob Marley)-[music:composer:compositions]->(Natural Mystic)
2)化合物数据示例
(Bob Marley)-[award:award_nominee:award_nominations]->(*MANY*)
award:award_nomination:award->Grammy Award for Best Music Film
award:award_nomination:ceremony->44th Annual Grammy Awards
award:award_nomination:nominated_for->Rebel Music - The Bob Marley Story
award:award_nomination:year->2001
award:award_nomination:award->Grammy Award for Best Music Film
award:award_nomination:ceremony->45th Annual Grammy Awards
award:award_nomination:nominated_for->Rebel Music - The Bob Marley Story II
award:award_nomination:year->2002
还有更多像那样的
我尝试了各种方法来排序
Neo4j参考卡说它允许节点的嵌套属性,但这似乎是一个骗局。我尝试了查询,FAIL
{姓名:" Alice",年龄:38岁, 地址:{city:' London',住宅:true}} 文字地图用花括号声明,就像属性地图一样。支持嵌套地图和集合。
答案 0 :(得分:1)
我看到传统的RDB分层思维 - 你需要改变它。图形允许您展平层次结构,并在相关节点之间建立相关信息组的直接关联。
我已经创建了一组节点和关系,我认为它们将为您提供您正在寻找的结构,并且可以扩展到您的其他场景。将以下命令插入neo4j数据库,看看你的想法:
// Create the nodes of the graph
CREATE (award:Award {name: "Grammy Award for Best Music Film"})
CREATE (date:AwardDate {year: 2001})
CREATE (film:Film {name: "Rebel Music - The Bob Marley Story"})
CREATE (event:Event {name: "44th Annual Grammy Awards", year: date.year})
CREATE (composition:Composition {name: "Natural Mystic"})
CREATE (composer:Composer {name: "Bob Marley"})
// Create the relationships between the graph nodes
MERGE (composer)-[:COMPOSITION]->(composition)
MERGE (composition)-[:SOUNDTRACK]->(film)
MERGE (event)-[:AWARD]->(award)
MERGE (event)-[:DATE]->(date)
MERGE (film)-[:DATE]->(date)
MERGE (composer)-[:DATE]->(date)
MERGE (composition)-[:DATE]->(date)
MERGE (film)-[:NOMINATED {year: date.year}]->(award)
MERGE (composer)-[:NOMINATED {year: date.year}]->(award)
MERGE (composition)-[:NOMINATED {year: date.year}]->(award)
MERGE (film)-[:EVENT]->(event)
MERGE (composer)-[:EVENT]->(event)
MERGE (composition)-[:EVENT]->(event)
此外,对于任何体面大小的节点集合,您都需要这些标签上的索引。