本文へスキップ
BecomeCoder

Neo4jコース · 第7章 グラフのデータモデリング · レッスン35

グラフで考える ― 名詞はノード・動詞は関係

ローカル実施

導入

要件を聞いて、いきなりCypherを書き始めるのは危険です。まずは「何がノードで、何がリレーションシップか」を整理する頭の体操が必要です。ここに便利な経験則があります。

説明

グラフのモデリングでよく使われる経験則が、「名詞はノード、動詞はリレーションシップ」という考え方です。

たとえば、次のような要件文があったとします。

「俳優 Keanu Reeves は、監督 Lana Wachowski が撮った映画 The Matrix に出演した」

この文の中から名詞と動詞を拾い出すと、次のように対応します。

文中の言葉種類グラフ上の要素
俳優 Keanu Reeves名詞(:Person {name: 'Keanu Reeves'}) ノード
監督 Lana Wachowski名詞(:Person {name: 'Lana Wachowski'}) ノード
映画 The Matrix名詞(:Movie {title: 'The Matrix'}) ノード
撮った動詞[:DIRECTED] リレーションシップ
出演した動詞[:ACTED_IN] リレーションシップ

これを図にすると、次のようになります。

graph LR
    keanu["(:Person<br/>Keanu Reeves)"] -- ACTED_IN --> matrix["(:Movie<br/>The Matrix)"]
    lana["(:Person<br/>Lana Wachowski)"] -- DIRECTED --> matrix

モデリングの実務での手順は、おおむね次のようになります。

  1. 要件文や画面イメージから、登場する「名詞」を洗い出す → ノードの候補にする。
  2. 名詞同士の間にある「動詞(つながり)」を洗い出す → リレーションシップの候補にする。
  3. 実際にどんなクエリを投げたいか(「何を知りたいか」)を思い浮かべ、そのクエリが自然に書けるモデルになっているか確認する。

3番目のステップが特に重要です。グラフのモデリングに唯一絶対の正解はなく、「どんな質問に答えたいか」によって最適な形は変わります。次のレッスン以降で、その判断のポイントを見ていきます。