Как моделировать отношения реального мира в базе данных графов (например, Neo4j)?

У меня есть общий вопрос о моделировании в базе данных графов, который я просто не могу понять.

Как вы смоделируете этот тип отношений: «Ньютон изобрел исчисление»?

В простом графике вы можете смоделировать его следующим образом:

Newton (node) -> invented (relationship) -> Calculus (node)

... куча «изобретенных» графических отношений по мере того, как вы добавляете больше людей и изобретений.

Проблема в том, что вам нужно добавить к взаимосвязи несколько свойств:

  • Изобретение_дата
  • влиятельные_концепции
  • влиятельные_пользователи
  • книги_изобретатель_вроте

... отношения между этими свойствами и другими узлами, такие как:

  • влиятельные_ люди: отношения к узлам личности
  • 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 , где вы можете создать узел «Performance», который связывает узел «Actor» с узлом «Film», как здесь: http: //www.freebase.com/edit/topic/en/the_last_samurai. Не совсем уверен, что это та же проблема.

Какие руководящие принципы вы используете, чтобы выяснить, должны ли «отношения реального мира» быть на самом деле узлами графа, а не отношениями графа?

Если есть какие-нибудь хорошие книги по этой теме, я хотел бы знать . Спасибо!

19
задан Lance Pollard 7 December 2014 в 17:10
поделиться