Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

🔢 CARDINALIDADES E REGRAS DE NEGÓCIO

A Cardinalidade define a "quantidade" de participações de uma entidade em um relacionamento. Ela é a tradução técnica das regras de negócio. 🛡️🧩


Objetivo: Compreender as cardinalidades máximas (1:1, 1:N, N:M) e mínimas (opcionalidade) e dominar as regras de posicionamento de Chaves Estrangeiras (FK).


📗 PASSO 1: Cardinalidade Máxima (O Limite)

Diz respeito ao número máximo de ocorrências permitidas.

🌓 1:1 (Um-para-Um)

A ocorrência de A se liga a no máximo uma de B.

  • Ex: Um GERENTE gerencia no máximo um DEPARTAMENTO.
  • Decisão: A FK pode ir em qualquer lado, preferencialmente no dependente.

🌿 1:N (Um-para-Muitos)

A ocorrência de A se liga a várias de B, mas B se liga a apenas uma de A (Hierarquia).

  • Ex: Um CLIENTE possui vários PEDIDOS.
  • Decisão: A FK vai SEMPRE no lado N (Pé de Galinha).

🕸️ N:M (Muitos-para-Muitos)

Várias ocorrências de A se ligam a várias de B.

  • Ex: ALUNOS e DISCIPLINAS.
  • Decisão: Gera uma Nova Tabela (Associativa) com as duas FKs.

📗 PASSO 2: Cardinalidade Mínima (Opcionalidade)

Indica se a participação é obrigatória (1) ou opcional (0).

📊 Representação Crow's Foot

erDiagram
    CLIENTE ||--o{ PEDIDO : "faz"
  • O traço vertical || indica que um Pedido deve ter 1 Cliente.
  • O círculo o{ indica que um Cliente pode ter zero ou muitos Pedidos.

📗 PASSO 3: Resumo de Mapeamento (Onde vai a FK?)

TipoDescriçãoOnde colocar a FK?
1 : 1Exclusividade TotalNo lado mais lógico ou opcional.
1 : NHierarquia Pai/FilhoSempre no lado N (Muitos).
N : MAssociação ComplexaGerar uma Terceira Tabela.

📗 PASSO 4: Resolvendo o Relacionamento N:M

📊 Mapeamento de Consultas Médicas

erDiagram
    MEDICO ||--o{ CONSULTA : ""
    PACIENTE ||--o{ CONSULTA : ""
    
    MEDICO {
        int id_medico PK
        string nome
    }
    PACIENTE {
        int id_paciente PK
        string nome
    }
    CONSULTA {
        int **id_medico** FK
        int **id_paciente** FK
        date data
    }

💡 Insight do Arquiteto: Se você colocar a FK no lado "1", você limita o sistema. O "N" é quem recebe a chave estrangeira para apontar para o seu único pai. 🚀🛡️