制約 ノードまたはリレーションシップに対して入力できるデータに制限を設けることができます。
制約は、ユーザーが間違った種類のデータを入力するのを防ぐため、データの整合性を強化するのに役立ちます。制約が適用されているときに誰かが間違った種類のデータを入力しようとすると、エラーメッセージが表示されます。
制約タイプ
Neo4jでは、一意性を作成できます 制約とプロパティの存在 制約。
- 一意性の制約
- プロパティに一意の値が含まれている必要があることを指定します(つまり、 Artist を持つ2つのノードはありません labelは Name の値を共有できます プロパティ。)
- プロパティの存在の制約
- 特定のラベルを持つすべてのノード、または特定のタイプを持つすべての関係にプロパティが存在することを確認します。プロパティの存在の制約は、Neo4jEnterpriseEditionでのみ使用できます。
一意性制約を作成する
Neo4jで一意性制約を作成するには、CREATE CONSTRAINT ON
を使用します 声明。このように:
CREATE CONSTRAINT ON (a:Artist) ASSERT a.Name IS UNIQUE
上記の例では、一意性を作成します 名前 の制約 Artist を持つすべてのノードのプロパティ ラベル。
ステートメントが成功すると、次のメッセージが表示されます。
制約を作成すると、Neo4jはインデックスを作成します。サイファーは、他のインデックスと同じように、そのインデックスをルックアップに使用します。
したがって、個別のインデックスを作成する必要はありません。実際、すでにインデックスが存在するときに制約を作成しようとすると、エラーが発生します。
制約を表示する
制約(およびインデックス)は、(オプションの)データベーススキーマの一部になります。
:schema
を使用して、作成したばかりの制約を表示できます。 指図。このように:
:schema
新しく作成された制約と、それを使用して作成されたインデックスが表示されます。以前に作成されたインデックスも確認できます:
制約をテストする
同じアーティストを2回作成することで、制約が実際に機能することをテストできます。
次のステートメントを2回実行します。
CREATE (a:Artist {Name: "Joe Satriani"}) RETURN a
初めて実行すると、ノードが作成されます。 2回目に実行すると、次のエラーメッセージが表示されます。
プロパティの存在の制約
プロパティ存在制約を使用して、特定のラベルを持つすべてのノードが特定のプロパティを持つようにすることができます。たとえば、 Artist というラベルの付いたすべてのノードを指定できます。 名前 が含まれている必要があります プロパティ。
プロパティ存在制約を作成するには、ASSERT exists(variable.propertyName)
を使用します 構文。
このように:
CREATE CONSTRAINT ON (a.Artist) ASSERT exists(a.Name)
プロパティの存在の制約は、Neo4jEnterpriseEditionでのみ使用可能であることに注意してください。