我有一个关于在图形数据库中建模的一般问题,我似乎无法将我的头围绕。如何在图形数据库中建立真实世界的关系(如Neo4j)?
你如何塑造这种类型的关系:“牛顿发明微积分”?
在simple graph,你可以喜欢这个型号:
Newton (node) -> invented (relationship) -> Calculus (node)
...所以你有一堆,你增加了更多的人,发明的“发明”曲线关系。
的问题是,你开始需要一堆属性添加到关系:
- invention_date
- influential_concepts
- influential_people
- books_inventor_wrote
...和您需要开始在这些属性和其他节点之间创建关系,如:
- influential_people:对人的关系节点
- books_inventor_wrote:关系到预定节点
所以现在看起来像“真实世界的关系”(“发明”)实际上应该是一个节点图形,图形应该是这样的:
Newton (node) -> (relationship) -> Invention of Calculus (node) -> (relationship) -> Calculus (node)
而对于复杂的事情更多,其他人也参加微积分的发明,使图表现在变成这样的:
Newton (node) ->
(relationship) ->
Newton's Calculus Invention (node) ->
(relationship) ->
Invention of Calculus (node) ->
(relationship) ->
Calculus (node)
Leibniz (node) ->
(relationship) ->
Leibniz's Calculus Invention (node) ->
(relationship) ->
Invention of Calculus (node) ->
(relationship) ->
Calculus (node)
所以我问这个问题,因为它看起来像你不想实际的图形数据库上设置属性“的关系”对象,因为你可能想在某个点将它们视为图中的节点。
这是正确的吗?
我一直在研究Freebase Metaweb Architecture,他们似乎把所有东西当作一个节点。例如,Freebase的想法是Mediator/CVT,您可以在其中创建一个将“Actor”节点链接到“Film”节点的“Performance”节点,如下所示:http://www.freebase.com/edit/topic/en/the_last_samurai。不太确定这是否是同一个问题。
你有什么指导原则可以用来确定“现实世界关系”是否应该实际上是一个图节点而不是一个图关系?
如果有关于这个话题的好书,我很想知道。谢谢!
优秀的答案!这真的为我清除了一切,谢谢。 –