導入
要件を聞いて、いきなり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
モデリングの実務での手順は、おおむね次のようになります。
- 要件文や画面イメージから、登場する「名詞」を洗い出す → ノードの候補にする。
- 名詞同士の間にある「動詞(つながり)」を洗い出す → リレーションシップの候補にする。
- 実際にどんなクエリを投げたいか(「何を知りたいか」)を思い浮かべ、そのクエリが自然に書けるモデルになっているか確認する。
3番目のステップが特に重要です。グラフのモデリングに唯一絶対の正解はなく、「どんな質問に答えたいか」によって最適な形は変わります。次のレッスン以降で、その判断のポイントを見ていきます。