Do UML ao esquema relacional

Relações, chaves, associações n-árias e estratégias de tradução de generalizações.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Chaves e referências

Cada classe origina uma relação com os seus atributos simples.

  • Uma superchave identifica cada tuplo; uma candidata é mínima por inclusão. Escolher uma primária não elimina as restantes candidatas.
  • Uma estrangeira referencia uma chave candidata, possivelmente da própria relação. Numa referência composta, todas as colunas têm de apontar ao mesmo tuplo alvo.
  • UNIQUE(email) com emails desconhecidos não faz de email uma chave candidata conceptual.

Decidir a tradução

Situação na UMLTradução e condição
Um para muitosEstrangeira no lado muitos. NOT NULL se a participação desse lado for obrigatória.
Muitos para muitosRelação própria com as duas referências. O par é chave se cada ligação ocorrer uma vez.
Um para umEstrangeira com UNIQUE. Junta NOT NULL para obrigatoriedade do lado que guarda a referência.
Id artificial numa associação N:MConserva UNIQUE do par original enquanto a regra se mantiver.
Reflexiva N:M, como amizadesRelação própria com papéis distintos; idPessoaA < idPessoaB guarda cada par uma vez, sem autoaresta.
Número local a um contexto, como clubeChave (idClube, numeroMembro). UNIQUE(idClube, idPessoa) só se cada pessoa tiver uma inscrição.
TernáriaRelação com as três estrangeiras. Se Produto/Projeto determinar o fornecedor, esse par é candidata.

Item(idEncomenda, idProduto, qtd, precoUnitario) guarda os factos do par: quantidade e preço da compra pertencem à ligação, não a cada extremo.

Uma estrangeira prova que o alvo existe; não prova que todos os alvos participam. Mesmo com Item obrigatório, uma encomenda pode ter zero linhas. Mínimos como “pelo menos um produto” exigem validação nas inserções e na remoção da última linha, incluindo estados intermédios da transação.

Generalizações e derivados

EstratégiaQuando serve e o que vigiar
Uma relação por classeSubclasse referencia a superclasse. Admite sobreposição; completude e disjunção pedem regras próprias.
Uma por tipo concretoRepete atributos herdados. Em completa e disjunta, só guarda tipos concretos; unicidade global não vem das primárias.
Uma relação únicaJunta todos os atributos. Um discriminador serve tipos disjuntos; sobreposição pede indicadores.

Composição pode justificar ON DELETE CASCADE, conforme o ciclo de vida escolhido. Um atributo derivado calcula-se numa consulta ou vista; guardá-lo exige regra de sincronização.

Comparação das estratégias de generalização.

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.