Mermaid vs PlantUML ER Diagrams: Application Schemas

Simon Yu··Updated ·7 min read
mermaidplantumler-diagramerddatabase-designdiagram-as-code

This article compares ER diagram expression only. For broader syntax, workflow, and integration differences, see the Mermaid vs PlantUML overview.

The short answer is: Mermaid is the better default for an application ERD that lives beside code. PlantUML is more useful when the same data model needs UML-style customization, reusable styling, or Chen notation for conceptual modeling.

Key Takeaways

  • Mermaid's Crow's Foot syntax is the practical default for application schemas.
  • PlantUML is useful when conceptual modeling requires dedicated Chen notation.
  • Keys and cardinality describe the model, but neither tool validates a live database or migration; place the ERD in context with the architecture comparison.

Both tools can draw entities, attributes, Crow's Foot relationships, optionality, and one-to-one or one-to-many cardinality. Mermaid's ER syntax also documents PK, FK, and UK markers directly, so PlantUML is not automatically the more formal choice for a normal relational schema.

This comparison uses the official references:

Official syntax was checked on July 22, 2026. These notations describe a model; neither documentation page promises database introspection, migration validation, or automatic schema synchronization.

Mermaid vs PlantUML ER Diagram Differences

AreaMermaidPlantUMLRecommendation
Crow's foot relationshipsNative ER syntaxInformation Engineering notationEither works
Entity attributesType, name, key, and commentFlexible entity/class-style compartmentsMermaid is more direct for schemas
Key markersPK, FK, UKCommonly shown with <<PK>>, <<FK>>, and <<UK>> text stereotypesMermaid is clearer out of the box
Relationship labelsNative labelsNative labelsEither works
DirectionTB, BT, LR, RLDirection and Graphviz-based layout controlsPlantUML offers broader layout control
Chen notationNot a separate native notationDedicated @startchen syntaxPlantUML for conceptual ER models
Shared stylingBasic class/style rulesThemes, skinparam, macros, and stereotypesPlantUML for large document sets
Markdown maintenanceCompact and familiarDepends on renderer integrationMermaid for repository docs

The decision is less about database size than diagram purpose. A schema snapshot and a conceptual data model may describe the same domain, but they answer different questions.

A Practical Store Schema Works Well in Both

The following examples model customers, orders, products, and order items. They include optionality and a many-to-many relationship resolved through ORDER_ITEM.

Mermaid

erDiagram
  CUSTOMER ||--o{ ORDER : places
  ORDER ||--|{ ORDER_ITEM : contains
  PRODUCT ||--o{ ORDER_ITEM : appears_in

  CUSTOMER {
    int id PK
    string email UK
    string name
  }

  ORDER {
    int id PK
    int customer_id FK
    datetime placed_at
    string status
  }

  PRODUCT {
    int id PK
    string sku UK
    string name
    decimal price
  }

  ORDER_ITEM {
    int order_id PK, FK
    int product_id PK, FK
    int quantity
    decimal unit_price
  }

PlantUML

@startuml
entity CUSTOMER {
  * id : int <<PK>>
  --
  email : string <<UK>>
  name : string
}

entity ORDER {
  * id : int <<PK>>
  --
  customer_id : int <<FK>>
  placed_at : datetime
  status : string
}

entity PRODUCT {
  * id : int <<PK>>
  --
  sku : string <<UK>>
  name : string
  price : decimal
}

entity ORDER_ITEM {
  * order_id : int <<PK, FK>>
  * product_id : int <<PK, FK>>
  --
  quantity : int
  unit_price : decimal
}

CUSTOMER ||--o{ ORDER : places
ORDER ||--|{ ORDER_ITEM : contains
PRODUCT ||--o{ ORDER_ITEM : appears in
@enduml

There is one important syntax difference in the PlantUML example: * marks a mandatory attribute, not a primary key. The <<PK>>, <<FK>>, and <<UK>> labels are documentation stereotypes added to the entity text; PlantUML does not interpret or validate them as database constraints.

Mermaid has an advantage in this example because PK, FK, and UK are defined parts of its ER attribute syntax. A reader can see key roles without first learning a project-specific convention. In both tools, however, these labels document the schema rather than validate it.

Neither diagram validates SQL types, indexes, cascading rules, or migration safety. They explain a model; they do not replace a schema migration or database linter.

Cardinality Is More Important Than Decorative Detail

An ERD becomes useful when readers can answer questions such as:

  • Can a customer exist without an order?
  • Must every order contain at least one item?
  • Can a product appear in zero orders?
  • Which entity owns the foreign key?

In crow's foot notation, ||--o{ means one instance on the left relates to zero or many instances on the right. Both tools can express this relationship compactly. Mermaid's dedicated ER syntax makes common cardinality markers especially easy to scan; PlantUML's Information Engineering notation uses familiar relationship markers in a broader UML-style language.

If the diagram is mainly documenting tables, focus on four things before styling:

  1. Correct optionality.
  2. Correct one-versus-many cardinality.
  3. Visible primary and foreign keys.
  4. A clear associative entity for many-to-many relationships.

Those choices prevent more misunderstanding than colors or icons.

PlantUML Adds Chen Notation for Conceptual Modeling

Crow's foot ERDs resemble relational schemas. Chen notation separates entities, attributes, and relationships into distinct shapes, which is useful when discussing a domain before deciding table structure.

PlantUML provides a dedicated Chen diagram mode:

@startchen
entity CUSTOMER {
  customer_id <<key>>
  name
  email
}

entity ORDER {
  order_id <<key>>
  placed_at
  status
}

relationship PLACES {
}

CUSTOMER -1- PLACES
PLACES -N- ORDER
@endchen

This is a real reason to choose PlantUML, not a cosmetic preference. A conceptual model asks what entities and relationships exist in the domain. A logical or physical ERD asks how those concepts map to keys, tables, and constraints. Mermaid's ER diagram is excellent for the latter; PlantUML can cover both styles.

ER Diagrams and Class Diagrams Are Not Interchangeable

ER diagrams focus on persisted data, cardinality, keys, and relationships. Class diagrams focus on software types, attributes, methods, inheritance, composition, and dependencies.

For an ORM-backed application, the two diagrams may look similar, but they serve different reviews:

  • Use an ER diagram to review database relationships and ownership.
  • Use a class diagram comparison to review object responsibilities and type relationships.
  • Keep both only when each answers a distinct question; duplicating the same boxes creates maintenance drift.

When to Choose Which

Choose Mermaid for an ER diagram when:

  • The schema belongs in a README, ADR, or service documentation.
  • You need clear PK, FK, and UK markers with little ceremony.
  • The model uses common crow's foot cardinality.
  • Developers who do not specialize in UML must keep it current.

Choose PlantUML when:

  • You need Chen notation for conceptual data modeling.
  • The ERD belongs to a broader PlantUML architecture document set.
  • You need shared macros, stereotypes, themes, or more layout control.
  • The model must use the same rendering pipeline as class, component, and deployment diagrams.

FAQ

Can Mermaid show primary and foreign keys?

Yes. Mermaid ER attributes can include PK, FK, and UK markers, including multiple markers on one attribute. These labels document key intent and make an application schema easier to review, but Mermaid does not inspect the database or verify that the rendered constraints match a live schema.

Does PlantUML have a native ER diagram?

PlantUML supports ER modeling in more than one way. Information Engineering notation provides Crow's Foot relationships for relational structures, while the dedicated Chen syntax starts with @startchen and represents conceptual entities, relationships, and attributes. Choose between them according to modeling level, not visual preference alone.

Which tool is better for a large database?

Diagram size alone should not decide. Large schemas are usually clearer when split by bounded context or business capability. Mermaid is often easier for several small repository-owned ERDs; PlantUML can be better when a centralized model needs shared styles and layout controls.

Can either tool generate an ERD directly from SQL?

Not from these diagram syntaxes alone. A separate parser or schema-introspection tool must read SQL and emit Mermaid or PlantUML source. The resulting diagram is generated documentation, not proof of correctness, so review cardinality, optionality, key ownership, and naming before publishing or using it in a design review.

Bottom line:

Mermaid is the efficient default for code-adjacent crow's foot ERDs. PlantUML is the broader modeling choice when you need Chen notation or a shared architecture-document pipeline.

Try the examples in the OnUML editor and compare how each format communicates the same schema.