導入
Neo4jが採用しているグラフの表現方法を プロパティグラフモデル と呼びます。ノードとリレーションシップという2つの要素に加えて、「ラベル」と「プロパティ」という2つの付加情報を組み合わせることで、現実世界のデータを柔軟かつ正確に表現します。
説明
プロパティグラフモデルは、次の4つの要素からできています。
| 要素 | 意味 | 例 |
|---|---|---|
| ノード(Node) | データの実体(点) | 人物・映画・会社 |
| ラベル(Label) | ノードの種類を表す分類名 | :Person、:Movie |
| リレーションシップ(Relationship) | ノード同士のつながり(線・必ず向きを持つ) | :KNOWS、:ACTED_IN |
| プロパティ(Property) | ノードやリレーションシップが持つ属性(key: value) | name: 'Alice'、since: 2020 |
図で表すと、次のようになります。
graph LR
A["(:Person)<br/>name: 'Alice'<br/>born: 1990"] -- "KNOWS<br/>since: 2020" --> B["(:Person)<br/>name: 'Bob'<br/>born: 1988"]
ここでのポイントは、プロパティはノードだけでなくリレーションシップにも付けられることです。「いつから知り合いか(since)」のような、関係そのものにまつわる情報を関係の側に持たせられるのは、グラフデータベースならではの表現力です(第7章で詳しく扱います)。
Neo4jでは、命名の慣習として次のルールがよく使われます。
- ラベルは
PascalCase(先頭大文字の単語をつなげる)…:Person、:Movie - リレーションシップの種類は
UPPER_SNAKE_CASE(大文字とアンダースコア)…:KNOWS、:ACTED_IN - プロパティ名は
camelCase(先頭小文字)…name、releaseYear
この慣習に沿って書くと、Cypherのクエリが「ノードは丸括弧・関係は角括弧で大文字」と見た目でひと目で区別できるようになります。