【发布时间】:2016-06-19 17:28:01
【问题描述】:
我创建了一个包含一些拳击比赛的简单 csv。我试图弄清楚如何在 Neo4j 中对此进行建模。
csv 看起来像这样:
我之所以在 Neo4j 中练习使用这个小数据集的兴趣是因为 Neo4j 似乎是一种很好的方法,可以轻松查询谁与谁战斗,谁有共同的对手,等等。
我的第一个想法是自然而然地,每个拳击手都应该在一个“拳击手”节点中表示,而每场战斗都应该在一个“战斗”节点中表示。
在这样建模之后,我意识到,实际上并不是每个拳击手都有一个节点,因为随着时间的推移,拳击手的年龄会发生变化。所以我意识到每个拳击手在每场比赛中都必须有一个单独的节点。例如,Glass Joe 有 2 场战斗,因此他出现了两次,一次是在 23 岁时,一次是在明年与 Sandman 战斗时,他 24 岁:
但这有点违背了目的。现在,我的图表将由 3 个节点的不连贯集合组成,每个节点对应 csv 中的每个战斗。那么目的是什么?
我的问题是,我如何才能对这样一个简单而复杂的情况进行建模:某种类型的锦标赛或游戏会随着时间的推移而变化,并且竞争对手节点的属性也会发生变化——但我们希望图是连接的:
(哎呀:睡魔现在应该是 51 岁了)
但话又说回来,我不认为上面的图像是正确的——显示的边缘实际上是boxer 节点的属性。如果它们是拳击手的属性……那么它们不属于边缘,对吧?
这是我目前的代码(以及 csv lives here):
LOAD CSV WITH HEADERS FROM
'file:///<grab it from dropbox please!>' AS line
CREATE (b:boxer {boxer_id: line.boxer_id, name: line.name})
SET b.age = TOINT(age);
LOAD CSV WITH HEADERS FROM
'file:///<grab it from dropbox please!>' AS line
MERGE(f:fight {fight_id: line.fight_id});
我最终得到了这些节点:
...但不确定如何连接它们。任何意见或建议将不胜感激。
【问题讨论】: