Use when creating entity-relationship diagrams, database schemas, or data models in Draw.io. Prevents the common mistake of using generic arrows instead of crow's foot notation (ERone, ERmany, ERzeroToOne, etc.). Covers entity table shapes, PK/FK notation, all cardinality markers, and entityRelationEdgeStyle. Keywords: ER diagram, entity-relationship, crow's foot, ERone, ERmany, cardinality, database schema, table, database diagram, data model, table relationships, one-to-many, many-to-many.
Use when creating entity-relationship diagrams, database schemas, or data models in Draw.io. Prevents the common mistake of using generic arrows instead of crow's foot notation (ERone, ERmany, ERzeroToOne, etc.). Covers entity table shapes, PK/FK notation, all cardinality markers, and entityRelationEdgeStyle. Keywords: ER diagram, entity-relationship, crow's foot, ERone, ERmany, cardinality, database schema, table, database diagram, data model, table relationships, one-to-many, many-to-many.
license
MIT
compatibility
Designed for Claude Code. Requires Draw.io / diagrams.net (current).
metadata
{"author":"OpenAEC-Foundation","version":"1.0"}
Draw.io ER Diagram Implementation
Purpose
This skill enables correct generation of entity-relationship diagrams, database schemas, and data models in Draw.io mxGraph XML. It enforces crow's foot notation for cardinality, proper entity table structures, and PK/FK visual conventions. The most common AI mistake is using generic arrows (endArrow=classic) instead of ER-specific markers (ERone, ERmany, etc.).
Critical Rules (Memorize These)
ALWAYS use entityRelationEdgeStyle for ER relationships — NEVER use orthogonalEdgeStyle or default edge routing.
ALWAYS use ER-specific arrow markers (ERone, ERmany, ERmandOne, ERzeroToOne, ERoneToMany, ERzeroToMany) — NEVER use endArrow=classic or endArrow=block in ER diagrams.
ALWAYS set startFill=0 and endFill=0 on ER edges — crow's foot markers MUST use Fill=0. Setting Fill=1 produces incorrect filled shapes.
ALWAYS use shape=table;childLayout=tableLayout;container=1; for entity shapes — this produces the standard database table appearance with a header row and stacked attribute rows.
ALWAYS place attribute rows as children of the entity — every attribute mxCell MUST have parent="<entity_id>". NEVER use parent="1".
ALWAYS mark primary key fields with fontStyle=4; (underline) — this is the standard ER convention for PKs.
ALWAYS mark foreign key fields with fontStyle=2; (italic) — this distinguishes FKs from regular attributes.
ALWAYS include both structural cells (id="0" and id="1" with parent="0") in every diagram.
This pattern is used in UML class diagrams and works for ER entities. The shape=table;childLayout=tableLayout pattern is PREFERRED for ER diagrams because it provides better table-like rendering with row separators.
Checklist: Before Outputting an ER Diagram
Every entity uses shape=table;container=1;childLayout=tableLayout;.
Every attribute row is a child of its entity (parent="<entity_id>").
Every PK field has fontStyle=4; (underline).
Every FK field has fontStyle=2; (italic).
Every relationship edge uses edgeStyle=entityRelationEdgeStyle;.
Every relationship edge uses ER* arrow types — NEVER classic or block.
Every ER arrow has startFill=0;endFill=0;.
Both structural cells (id="0" and id="1") are present.
All edge source and target attributes point to valid entity cell IDs.
<mxCellid="ord_fk"value="customer_id FK INT"style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;whiteSpace=wrap;html=1;fontStyle=2;"vertex="1"parent="ent_ord">
<mxCellid="line_fk1"value="order_id FK INT"style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;whiteSpace=wrap;html=1;fontStyle=2;"vertex="1"parent="ent_line">
<mxCellid="line_fk2"value="product_id FK INT"style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;whiteSpace=wrap;html=1;fontStyle=2;"vertex="1"parent="ent_line">