# Neo4jの機能と実践的な使い方
🔒 インポート前に一意制約を1本張る——たったそれだけで、MERGEの重複防止と高速ルックアップを同時に手に入れられます。公式もインポートの前提手順として明記しています。
🏷️ タイトル: Uniqueness / Property existence / Node key constraints
🔗 URL:
📘 概要
制約は、ノードやリレーションシップが満たすべきルールをDBレイヤで強制する仕組みです。キーの一意性や必須プロパティを保証し、複数パイプラインからの書き込みでもエンティティの整合性を守ります。一意制約は裏で range インデックスを生成し、ルックアップも速くします。
⚙️ 機能の説明
・プロパティ一意制約: ラベル/型ごとにプロパティ値(または組み合わせ)の一意を保証します。Community Editionでも利用可能で、裏側の range インデックスがMERGEやインポートを最適化します。
・プロパティ存在制約: 指定プロパティが必ず存在することを保証します(Enterprise限定)。
・プロパティ型制約: プロパティが指定の型であることを保証し、スキーマのドリフトを防ぎます(Enterprise限定)。
・キー制約(Node key / Relationship key): 一意性と存在を兼ね備え、複合主キーに相当します(Enterprise限定)。
🛠️ 実践的な使い方
インポート前に必ず作成する一意制約です。
```cypher
CREATE CONSTRAINT person_id IF NOT EXISTS
FOR (p:Person) REQUIRE IS UNIQUE;
```
ノードキー(複合キー)と存在制約の例です。
```cypher
CREATE CONSTRAINT order_key IF NOT EXISTS
FOR (o:Order) REQUIRE (o.tenantId, o.orderId) IS NODE KEY;
CREATE CONSTRAINT user_email_exists IF NOT EXISTS
FOR (u:User) REQUIRE IS NOT NULL;
```
確認・削除は次の通りです。
```cypher
SHOW CONSTRAINTS;
DROP CONSTRAINT person_id IF EXISTS;
```
💡 ユースケース
・大量インポート前に一意制約を張り、MERGEの重複防止と高速化を同時に得る。
・マスタ系ノードのキー整合性をDBで強制し、複数パイプライン書き込みでも二重化を防ぐ。
⚠️ 注意点
・一意制約以外(存在・型・キー)はEnterprise Edition限定です。Communityでは一意制約のみ使えます。
・既にデータに違反がある状態で制約を作成すると失敗します。先にデータをクレンジングします。
・バルクインポートは有効な制約に対して検証され、違反があると失敗し得ます。
・より高度な制約や一元管理が必要なら、graph type によるスキーマ定義が推奨されています。
#
Neo4j# #
Cypher#