🗄️ Mermaid

Diagrama entidade-relação

Desenhe esquemas de base de dados que fazem sentido

O que é um Diagrama entidade-relação?

Um diagrama ER mostra as entidades de uma base de dados, os seus atributos e a cardinalidade das relações entre elas (um-para-muitos, muitos-para-muitos). É a planta de qualquer base de dados relacional.

O diagrama entidade-relação pertence ao pull request que acrescenta uma migração e à primeira hora de onboarding, onde a forma mais rápida de explicar um produto é muitas vezes o seu modelo de dados. Torna a cardinalidade explícita: um ou vários endereços por cliente é uma regra de negócio, não um detalhe. O que não transporta é o desenho físico — sem índices, sem partições, sem padrões de consulta. O ficheiro de migração continua a ser a fonte de verdade.

Exemplo em tempo real

Código Mermaid
erDiagram
    CUSTOMER ||--o{ ORDER : places
    ORDER ||--|{ ORDER_LINE : contains
    PRODUCT ||--o{ ORDER_LINE : "ordered in"
    CUSTOMER {
      string id PK
      string email UK
    }
    ORDER {
      string id PK
      date created_at
    }
Exemplo em tempo real

places

contains

ordered in

CUSTOMER

string

id

PK

string

email

UK

ORDER

string

id

PK

date

created_at

ORDER_LINE

PRODUCT

Quando usar

Desenhar um novo esquema de base de dados antes da primeira migração
Documentar um esquema existente para os novos membros da equipa
Discutir modelos de dados com interlocutores não técnicos

Erros frequentes

Cardinalidade lida do lado errado

Em CUSTOMER ||--o{ ORDER : places, o || junto a CUSTOMER significa um cliente por encomenda, e o o{ junto a ORDER significa zero ou mais encomendas por cliente. Cada marcador conta a sua própria entidade, vista da outra ponta.

Uma relação sem rótulo

CUSTOMER ||--o{ ORDER sozinho é um erro de análise: o Mermaid espera dois pontos. Escreva : places, ou : "" quando a relação é evidente. É de longe a falha mais comum num erDiagram.

Nomes de entidade com espaços

ORDER LINE ||--o{ PRODUCT não cria uma entidade chamada ORDER LINE — o nome é partido no espaço. Ponha-o entre aspas, "ORDER LINE", ou use a convenção de sublinhado que o resto do esquema já segue.

Sintaxe básica

.mmd
erDiagram
    USER ||--o{ POST : writes
    USER {
      string id PK
      string email
    }
  • CUSTOMER ||--o{ ORDER : places

    Toda a relação precisa de um rótulo a seguir aos dois pontos; escreva : "" quando não há nada de útil a dizer. Ponha entre aspas os rótulos com espaços, como em : "ordered in".

  • ORDER { string id PK decimal total "in cents" }

    Os atributos são tipo, depois nome, depois marcadores de chave opcionais (PK, FK, UK, separados por vírgulas) e um comentário entre aspas. Os tipos são texto livre e nada é validado.

  • ORDER ||--|{ LINE : contains CUSTOMER }o..o{ PROMO : uses

    Uma linha contínua é uma relação identificadora — o filho não pode existir sozinho. Os pontos marcam uma relação não identificadora, em que a chave estrangeira é opcional.

  • erDiagram direction LR

    A direção predefinida é de cima para baixo. direction LR estende um esquema largo na horizontal, o que costuma encaixar melhor numa página de documentação do que uma coluna alta de entidades.

Perguntas sobre este diagrama

Como leio os símbolos de cardinalidade como ||--o{ ?

|| significa exatamente um, o| zero ou um, }| um ou mais, }o zero ou mais. Assim, CUSTOMER ||--o{ ORDER lê-se «um cliente faz zero ou mais encomendas».

Posso gerar um diagrama ER a partir de SQL?

Sim — cole as suas instruções CREATE TABLE ou descreva os seus dados e a IA produz o diagrama ER correspondente com chaves e relações.

Posso manter um diagrama entidade-relação sob controlo de versões com as minhas migrações?

Sim, e é essa a principal razão para o escrever em texto. O diagrama fica ao lado da migração, aparece linha a linha no diff da revisão, e uma alteração de esquema que ninguém refletiu nele salta à vista como uma edição em falta.

Um diagrama entidade-relação Mermaid mostra índices e restrições?

Não. Mostra entidades, tipos de atributo e marcadores PK, FK ou UK, e mais nada: nem índices, nem valores predefinidos, nem restrições check, nem triggers. Trate-o como um mapa do esquema, não como uma especificação a partir da qual geraria uma base de dados.

Como modelo uma relação muitos-para-muitos?

Ou a desenha diretamente com }o--o{, ou modela a entidade de junção explicitamente: STUDENT ||--o{ ENROLMENT e COURSE ||--o{ ENROLMENT. Use a segunda forma assim que a junção passa a ter colunas próprias, como uma data de inscrição.

Qual é a diferença entre PK, FK e UK?

PK marca a chave primária, FK uma chave estrangeira que aponta para outra entidade e UK uma restrição de unicidade. O Mermaid apresenta-os apenas como rótulos — nunca verifica se uma FK corresponde a uma chave primária noutro ponto do diagrama.

Diagrama entidade-relação ou outro tipo de diagrama?

Diagrama entidade-relação ou diagrama de classes?

Escolha pelo que o leitor vai fazer a seguir. Se vai escrever SQL ou uma migração, dê-lhe entidades, chaves e cardinalidades. Se vai escrever código de aplicação, um diagrama de classes com métodos e herança está mais perto do que ele vai efetivamente teclar.

Diagrama entidade-relação ou fluxograma?

O diagrama entidade-relação responde a «o que é guardado e como se relaciona»; o fluxograma responde a «o que acontece e por que ordem». Caixas que são substantivos com atributos pertencem a um diagrama entidade-relação; caixas que são verbos pertencem a um fluxograma.

Crie já o seu Diagrama entidade-relação

Descreva-o em linguagem natural — a IA escreve o código Mermaid por si.

Abrir o Mermaid Studio