🔢 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
GERENTEgerencia no máximo umDEPARTAMENTO. - 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
CLIENTEpossui váriosPEDIDOS. - 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:
ALUNOSeDISCIPLINAS. - 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?)
| Tipo | Descrição | Onde colocar a FK? |
|---|---|---|
| 1 : 1 | Exclusividade Total | No lado mais lógico ou opcional. |
| 1 : N | Hierarquia Pai/Filho | Sempre no lado N (Muitos). |
| N : M | Associação Complexa | Gerar 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. 🚀🛡️