[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FEB9ZP3FTZ2TGJD2Q22Q4R":3,"skill-same:01M6FEB9ZP3FTZ2TGJD2Q22Q4R":48},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":21,"linkOnly":22,"markdownContent":23,"markdownBody":23,"frontMatter":24,"refName":25,"commitSha":26,"skillDirectory":27,"forksCount":28,"repositoryHtmlUrl":29,"repositoryHomepageUrl":30,"ownerHtmlUrl":31,"ownerBlogUrl":6,"ownerDescription":32,"updatedAt":33,"install":34,"resources":47},"01M6FEB9ZP3FTZ2TGJD2Q22Q4R","graph-schema",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fpproenca\u002Fdot-skills\u002Fgraph-schema\u002FSKILL.md",[],[18,19,20],"graph","schema","graph schema","2026-11-10 10:12:30",false,"# dot-skills Graph Database Schema Design Best Practices\n\nComprehensive graph database data modeling guide for property graphs (Neo4j, Memgraph, Amazon Neptune, etc.). Contains 46 rules across 8 categories, prioritized by modeling impact from critical (entity classification, relationship design) to incremental (scale and evolution). Each rule includes detailed explanations, real-world Cypher examples comparing incorrect vs. correct models, and specific impact descriptions.\n\n**Philosophy:** Data modeling correctness first, performance second. Always ask \"what is the user trying to achieve?\" before choosing structure.\n\n## When to Apply\n\nReference these guidelines when:\n- Designing a new graph database schema from domain requirements\n- Translating a relational schema to a graph model\n- Deciding whether something should be a node, relationship, or property\n- Reviewing an existing graph schema for modeling errors\n- Refactoring a graph that produces awkward or slow queries\n- Planning for schema evolution and data growth\n\n## Rule Categories by Priority\n\n| Priority | Category | Impact | Prefix |\n|----------|----------|--------|--------|\n| 1 | Entity Classification | CRITICAL | `entity-` |\n| 2 | Relationship Design | CRITICAL | `rel-` |\n| 3 | Property Placement | HIGH | `prop-` |\n| 4 | Query-Driven Refinement | HIGH | `query-` |\n| 5 | Structural Patterns | HIGH | `pattern-` |\n| 6 | Anti-Patterns | MEDIUM | `anti-` |\n| 7 | Constraints & Integrity | MEDIUM | `constraint-` |\n| 8 | Scale & Evolution | LOW-MEDIUM | `scale-` |\n\n## Quick Reference\n\n### 1. Entity Classification (CRITICAL)\n\n- [`entity-events`](references\u002Fentity-events.md) - Model multi-participant events as first-class nodes\n- [`entity-shared-values`](references\u002Fentity-shared-values.md) - Promote shared property values to nodes\n- [`entity-specific-labels`](references\u002Fentity-specific-labels.md) - Use specific labels over generic ones\n- [`entity-multi-label`](references\u002Fentity-multi-label.md) - Qualify entities with multiple labels\n- [`entity-identity-state`](references\u002Fentity-identity-state.md) - Separate identity from mutable state\n- [`entity-reify-actions`](references\u002Fentity-reify-actions.md) - Reify lifecycle actions into nodes\n- [`entity-avoid-god-nodes`](references\u002Fentity-avoid-god-nodes.md) - Avoid kitchen-sink entity nodes\n\n### 2. Relationship Design (CRITICAL)\n\n- [`rel-specific-types`](references\u002Frel-specific-types.md) - Use specific relationship types over generic ones\n- [`rel-meaningful-direction`](references\u002Frel-meaningful-direction.md) - Choose semantically meaningful direction\n- [`rel-naming-conventions`](references\u002Frel-naming-conventions.md) - Follow UPPER_SNAKE_CASE for relationship types\n- [`rel-no-redundant-reverse`](references\u002Frel-no-redundant-reverse.md) - Don't create redundant reverse relationships\n- [`rel-properties-scope`](references\u002Frel-properties-scope.md) - Put data on relationships only when it describes the connection\n- [`rel-single-semantic`](references\u002Frel-single-semantic.md) - One relationship type per semantic meaning\n- [`rel-typed-over-filtered`](references\u002Frel-typed-over-filtered.md) - Prefer typed relationships over generic + property filter\n\n### 3. Property Placement (HIGH)\n\n- [`prop-no-foreign-keys`](references\u002Fprop-no-foreign-keys.md) - Don't embed foreign keys as properties\n- [`prop-promote-to-node`](references\u002Fprop-promote-to-node.md) - Promote frequently-queried values to nodes\n- [`prop-correct-data-types`](references\u002Fprop-correct-data-types.md) - Use appropriate data types for properties\n- [`prop-no-arrays-for-connections`](references\u002Fprop-no-arrays-for-connections.md) - Don't use property arrays when you need relationships\n- [`prop-relationship-vs-node-data`](references\u002Fprop-relationship-vs-node-data.md) - Know when data belongs on relationship vs. node\n\n### 4. Query-Driven Refinement (HIGH)\n\n- [`query-critical-traversals`](references\u002Fquery-critical-traversals.md) - Design for your most critical traversals first\n- [`query-shortcut-relationships`](references\u002Fquery-shortcut-relationships.md) - Add shortcut relationships for frequent multi-hop queries\n- [`query-denormalize-reads`](references\u002Fquery-denormalize-reads.md) - Denormalize for read-heavy paths\n- [`query-filter-by-rel-props`](references\u002Fquery-filter-by-rel-props.md) - Use relationship properties to filter traversals\n- [`query-test-before-deploy`](references\u002Fquery-test-before-deploy.md) - Test model against real queries before deploying\n\n### 5. Structural Patterns (HIGH)\n\n- [`pattern-intermediary-nodes`](references\u002Fpattern-intermediary-nodes.md) - Use intermediary nodes for multi-entity relationships\n- [`pattern-hierarchy`](references\u002Fpattern-hierarchy.md) - Model hierarchies with category nodes and depth relationships\n- [`pattern-linked-list`](references\u002Fpattern-linked-list.md) - Use linked lists for ordered sequences\n- [`pattern-timeline-tree`](references\u002Fpattern-timeline-tree.md) - Apply timeline trees for temporal data\n- [`pattern-fan-out`](references\u002Fpattern-fan-out.md) - Fan-out pattern for event streams and activity feeds\n- [`pattern-bipartite`](references\u002Fpattern-bipartite.md) - Use bipartite structure for many-to-many with context\n\n### 6. Anti-Patterns (MEDIUM)\n\n- [`anti-join-table-nodes`](references\u002Fanti-join-table-nodes.md) - Don't model relational join tables as nodes\n- [`anti-generic-relationships`](references\u002Fanti-generic-relationships.md) - Don't use generic RELATED_TO or CONNECTED relationships\n- [`anti-relational-porting`](references\u002Fanti-relational-porting.md) - Don't port relational schemas directly to graph\n- [`anti-over-modeling`](references\u002Fanti-over-modeling.md) - Don't make everything a node\n- [`anti-duplicate-data`](references\u002Fanti-duplicate-data.md) - Don't duplicate data instead of creating relationships\n- [`anti-string-encoded-structure`](references\u002Fanti-string-encoded-structure.md) - Don't encode structured data as delimited strings\n\n### 7. Constraints & Integrity (MEDIUM)\n\n- [`constraint-unique-identifiers`](references\u002Fconstraint-unique-identifiers.md) - Define uniqueness constraints on natural identifiers\n- [`constraint-existence`](references\u002Fconstraint-existence.md) - Use existence constraints for required properties\n- [`constraint-index-traversals`](references\u002Fconstraint-index-traversals.md) - Create indexes on traversal entry point properties\n- [`constraint-no-over-index`](references\u002Fconstraint-no-over-index.md) - Don't over-index — each index has a write cost\n- [`constraint-node-key`](references\u002Fconstraint-node-key.md) - Use composite node keys for natural multi-part identifiers\n\n### 8. Scale & Evolution (LOW-MEDIUM)\n\n- [`scale-supernode-mitigation`](references\u002Fscale-supernode-mitigation.md) - Mitigate supernodes with fan-out or partitioning\n- [`scale-temporal-versioning`](references\u002Fscale-temporal-versioning.md) - Separate current state from historical state\n- [`scale-schema-migration`](references\u002Fscale-schema-migration.md) - Plan for label and relationship type evolution\n- [`scale-batch-refactoring`](references\u002Fscale-batch-refactoring.md) - Use APOC or batched queries for schema refactoring\n- [`scale-dense-node-detection`](references\u002Fscale-dense-node-detection.md) - Monitor and detect emerging supernodes\n\n## How to Use\n\nRead individual reference files for detailed explanations and code examples:\n\n- [Section definitions](references\u002F_sections.md) - Category structure and impact levels\n- [Rule template](assets\u002Ftemplates\u002F_template.md) - Template for adding new rules\n\n## Reference Files\n\n| File | Description |\n|------|-------------|\n| [references\u002F_sections.md](references\u002F_sections.md) | Category definitions and ordering |\n| [assets\u002Ftemplates\u002F_template.md](assets\u002Ftemplates\u002F_template.md) | Template for new rules |\n| [metadata.json](metadata.json) | Version and reference information |\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fpproenca\u002Fdot-skills\u002Fgraph-schema",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":35,"prompt":45,"zipAvailable":46},[36,39,42],{"tool":37,"command":38},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill graph-schema",{"tool":40,"command":41},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill graph-schema",{"tool":43,"command":44},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill graph-schema","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fpproenca\u002Fdot-skills\u002Fgraph-schema\u002FSKILL.md",true,[],[49,63,73,82,88,95],{"skillNo":50,"name":51,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":52,"categories":53,"keywords":59,"publishedAt":21},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[54],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[60,61,62],"model","model hierarchy","model hierarchy skill",{"skillNo":64,"name":65,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":69,"publishedAt":21},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[68],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},[70,71,72],"MCP","zoom","zoom mcp",{"skillNo":74,"name":75,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":21},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[79,80,81,71],"sdk","zoom apps sdk","apps",{"skillNo":83,"name":84,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":21},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[84],{"skillNo":89,"name":90,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":94,"publishedAt":21},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[93],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},[90],{"skillNo":96,"name":97,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":21},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[97]]