graph-schema について
Neo4j、Memgraph、Amazon Neptuneなどのプロパティグラフデータベース向けに、スキーマ設計とレビューを支援するリファレンススキルです。46のルールが、モデリング、クエリ、整合性、スキーマ進化をCypher例とともに扱います。
主な機能
- 01スキーマ設計に関する46のルール
- 02優先度別の8カテゴリ
- 03正誤を比較するCypher例
- 04制約とデータ整合性の指針
- 05拡張性とスキーマ進化の助言
活用シーン
- 01ドメイン要件からグラフスキーマを設計
- 02リレーショナルスキーマをグラフに変換
- 03既存のグラフモデルをレビューまたは再構成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill graph-schemaインストール後、Claude Code で/graph-schemaを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
AGENTS.mdmetadata.jsonassets/templates/_template.mdreferences/_sections.mdanti-duplicate-data.mdanti-generic-relationships.mdanti-join-table-nodes.mdanti-over-modeling.mdanti-relational-porting.mdanti-string-encoded-structure.mdconstraint-existence.mdconstraint-index-traversals.mdconstraint-no-over-index.mdconstraint-node-key.mdconstraint-unique-identifiers.mdentity-avoid-god-nodes.mdentity-events.mdentity-identity-state.mdentity-multi-label.mdentity-reify-actions.mdentity-shared-values.mdentity-specific-labels.mdpattern-bipartite.mdpattern-fan-out.mdpattern-hierarchy.mdpattern-intermediary-nodes.mdpattern-linked-list.mdpattern-timeline-tree.mdprop-correct-data-types.mdprop-no-arrays-for-connections.md詳細
dot-skills グラフデータベースのスキーマ設計に関するベストプラクティス
プロパティグラフ(Neo4j、Memgraph、Amazon Neptune など)の包括的なグラフデータベースデータモデリングガイドです。重要度の高いもの(エンティティ分類、リレーションシップ設計)から段階的な改善(規模と進化)まで、モデリングへの影響度に基づいて優先順位付けされた8カテゴリ・46のルールを収録しています。各ルールには詳細な説明、誤ったモデルと適切なモデルを比較する実践的な Cypher の例、具体的な影響の説明が含まれています。
基本方針: まずデータモデリングの正確性を優先し、その次にパフォーマンスを考慮します。構造を選ぶ前に、必ず「ユーザーが達成しようとしていることは何か?」と問いかけてください。
適用する場面
次のような場合に、これらのガイドラインを参照してください。
- ドメイン要件に基づいて新しいグラフデータベースのスキーマを設計するとき
- リレーショナルスキーマをグラフモデルに変換するとき
- ある要素をノード、リレーションシップ、プロパティのどれにするか判断するとき
- 既存のグラフスキーマにモデリング上の誤りがないか確認するとき
- 扱いにくいクエリや遅いクエリを生み出すグラフをリファクタリングするとき
- スキーマの進化とデータの増加に備えるとき
優先度別のルールカテゴリ
| 優先度 | カテゴリ | 影響 | プレフィックス |
|---|---|---|---|
| 1 | エンティティ分類 | CRITICAL | entity- |
| 2 | リレーションシップ設計 | CRITICAL | rel- |
| 3 | プロパティの配置 | HIGH | prop- |
| 4 | クエリに基づく改善 | HIGH | query- |
| 5 | 構造パターン | HIGH | pattern- |
| 6 | アンチパターン | MEDIUM | anti- |
| 7 | 制約と整合性 | MEDIUM | constraint- |
| 8 | 規模と進化 | LOW-MEDIUM | scale- |
クイックリファレンス
1. エンティティ分類(CRITICAL)
entity-events- 複数の参加者が関わるイベントを第一級ノードとしてモデル化するentity-shared-values- 共有されるプロパティ値をノードに昇格させるentity-specific-labels- 汎用的なラベルではなく、具体的なラベルを使うentity-multi-label- 複数のラベルでエンティティを分類するentity-identity-state- 識別情報と変更可能な状態を分離するentity-reify-actions- ライフサイクル上のアクションをノードとして実体化するentity-avoid-god-nodes- 何でも詰め込んだエンティティノードを避ける
2. リレーションシップ設計(CRITICAL)
rel-specific-types- 汎用的なものではなく、具体的なリレーションシップタイプを使うrel-meaningful-direction- 意味的に適切な方向を選ぶrel-naming-conventions- リレーションシップタイプには UPPER_SNAKE_CASE を使用するrel-no-redundant-reverse- 冗長な逆方向のリレーションシップを作成しないrel-properties-scope- データが接続を表す場合にのみ、リレーションシップに配置するrel-single-semantic- 1つの意味ごとに1種類のリレーションシップタイプを使うrel-typed-over-filtered- 汎用タイプとプロパティフィルターの組み合わせより、型付きリレーションシップを優先する
3. プロパティの配置(HIGH)
prop-no-foreign-keys- 外部キーをプロパティとして埋め込まないprop-promote-to-node- 頻繁にクエリされる値をノードに昇格させるprop-correct-data-types- プロパティには適切なデータ型を使うprop-no-arrays-for-connections- リレーションシップが必要な場合にプロパティ配列を使わないprop-relationship-vs-node-data- データをリレーションシップとノードのどちらに配置すべきかを判断する
4. クエリ駆動の改善(HIGH)
query-critical-traversals- 最も重要なトラバーサルを優先して設計しますquery-shortcut-relationships- 頻繁に行う複数ホップのクエリには、ショートカットとなるリレーションシップを追加しますquery-denormalize-reads- 読み取りが多いパスでは非正規化しますquery-filter-by-rel-props- リレーションシップのプロパティを使用してトラバーサルをフィルタリングしますquery-test-before-deploy- デプロイ前に実際のクエリでモデルをテストします
5. 構造パターン(HIGH)
pattern-intermediary-nodes- 複数のエンティティ間のリレーションシップには中間ノードを使用しますpattern-hierarchy- カテゴリノードと深さを表すリレーションシップで階層をモデル化しますpattern-linked-list- 順序付きシーケンスには連結リストを使用しますpattern-timeline-tree- 時系列データにはタイムラインツリーを適用しますpattern-fan-out- イベントストリームやアクティビティフィードにはファンアウトパターンを使用しますpattern-bipartite- コンテキストを伴う多対多の関係には二部構造を使用します
6. アンチパターン(MEDIUM)
anti-join-table-nodes- リレーショナルデータベースの結合テーブルをノードとしてモデル化しないでくださいanti-generic-relationships- 汎用的な RELATED_TO や CONNECTED リレーションシップを使用しないでくださいanti-relational-porting- リレーショナルスキーマをそのままグラフに移植しないでくださいanti-over-modeling- すべてをノードにしないでくださいanti-duplicate-data- リレーションシップを作成する代わりにデータを重複させないでくださいanti-string-encoded-structure- 構造化データを区切り文字列としてエンコードしないでください
7. 制約と整合性(MEDIUM)
constraint-unique-identifiers- 自然識別子に一意性制約を定義しますconstraint-existence- 必須プロパティには存在制約を使用しますconstraint-index-traversals- トラバーサルの開始点となるプロパティにインデックスを作成しますconstraint-no-over-index- インデックスを過剰に作成しないでください。各インデックスには書き込みコストが伴いますconstraint-node-key- 自然な複合識別子には複合ノードキーを使用します
8. スケールと進化(LOW-MEDIUM)
scale-supernode-mitigation- ファンアウトまたはパーティショニングでスーパーノードを軽減しますscale-temporal-versioning- 現在の状態と履歴状態を分離しますscale-schema-migration- ラベルとリレーションシップタイプの変更を計画しますscale-batch-refactoring- スキーマのリファクタリングには APOC またはバッチクエリを使用しますscale-dense-node-detection- 新たに発生するスーパーノードを監視、検出します
使用方法
詳しい説明とコード例については、各リファレンスファイルを参照してください。
- セクションの定義 - カテゴリの構造と影響度
- ルールのテンプレート - 新しいルールを追加するためのテンプレート
リファレンスファイル
| ファイル | 説明 |
|---|---|
| references/_sections.md | カテゴリの定義と順序 |
| assets/templates/_template.md | 新しいルール用のテンプレート |
| metadata.json | バージョンとリファレンス情報 |
コメント
Markdown 対応