20

グラフ データベースでのモデリングに関する一般的な質問がありますが、理解できないようです。

このタイプの関係をどのようにモデル化しますか: 「ニュートンが微積分を発明した」?

単純なグラフでは、次のようにモデル化できます。

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

...したがって、より多くの人や発明を追加すると、「発明された」グラフ関係がたくさんできます。

問題は、関係に一連のプロパティを追加する必要があることです。

  • 発明日
  • 影響力のある概念
  • 影響力のある人々
  • books_inventor_write

...そして、これらのプロパティと他のノードとの間の関係の作成を開始する必要があります。たとえば、次のようになります。

  • influential_people: person ノードとの関係
  • books_inventor_wrote: book ノードとの関係

したがって、「現実世界の関係」(「発明された」)は実際にはグラフのノードである必要があり、グラフは次のようになります。

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/ja/the_last_samurai . ただし、これが同じ問題であるかどうかはよくわかりません。

「実世界のリレーションシップ」が実際にグラフ リレーションシップではなくグラフ ノードであるべきかどうかを判断するために使用する指針となる原則は何ですか?

このトピックに関する良い本があれば、知りたいです。ありがとう!

4

1 に答える 1