Cheat sheet

Chaves, formas normais, decomposição, álgebra, SQL, isolamento e decisões de desenho.

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Esta folha reúne as regras e decisões já explicadas nas lições, para rever antes de resolver exercícios. Cada secção indica o procedimento, as condições e os erros frequentes, com ligações para a explicação completa.

Modelação e relações

ConstruçãoTradução e cuidado
ClasseRelação com atributos e chave. Um nome repetível não identifica um objeto.
1:NFK no lado N; NOT NULL se tiver de referenciar alguém. Não obriga cada objeto do lado 1 a participar.
N:MRelação da associação, FKs e chave segundo as multiplicidades. Atributos da ligação ficam aqui.
1:1FK com UNIQUE; NOT NULL para obrigatoriedade no lado que a guarda.
TernáriaRelação com os participantes. Multiplicidade num lado conta-o para um par fixo dos outros dois.
GeneralizaçãoPor classe, por tipo concreto ou tabela única. Confere completude e disjunção separadamente.

A multiplicidade junto de uma classe conta objetos dessa classe por objeto da outra. Uma classe de associação não distingue várias ligações do mesmo par. Uma FK não impõe mínimos de participação no lado referenciado.

Erro frequente: ler a multiplicidade do lado errado e concluir a participação inversa. Outro erro: usar DISTINCT para esconder uma junção errada em vez de escolher o id correto.

UML · Mapeamento.

Dependências e formas normais

X→YX\to Y significa que concordar em X obriga a concordar em Y em todas as instâncias válidas.

Para X+X^+, começa em X e aplica DFs cujas esquerdas já tens, até estabilizar. Superchave: fecho completo. Candidata: superchave mínima. Primo: pertence a alguma candidata.

Erros frequentes: concluir uma DF a partir de uma amostra; separar a esquerda de AB→CAB\to C; testar redundância sem retirar a DF antes do fecho.

Fechos e chaves.

FormaCritério
1FNValores atómicos no modelo, sem grupos repetidos.
2FNNão primo não depende de parte própria de candidata.
3FNPara cada DF não trivial X→AX\to A, X é superchave ou A é primo.
BCNFEm toda a DF não trivial, X é superchave.

Pode haver 3FN sem BCNF: AB→CAB\to C, C→BC\to B, candidatas AB e AC. C não é superchave, mas B é primo. Classificação.

Decomposição

ObjetivoComo conferir
Sem perda, bináriaO comum determina um dos lados: (R1∩R2)→R1(R_1\cap R_2)\to R_1 ou R2R_2.
Sem perda, geralChase. Unifica pelas DFs; procura uma linha só com símbolos distinguidos.
Preservar DFsA união das projeções implica as DFs originais. Confere por fechos.
BCNFPela violação X→YX\to Y, separa X∪YX\cup Y e R−(Y−X)R-(Y-X); projeta e repete.
Síntese 3FNCobertura mínima, relação por DF, retira esquemas contidos e acrescenta candidata se nenhuma relação a contiver.

A síntese tem de cobrir todos os atributos, incluindo os ausentes das DFs, e conter uma candidata. Recuperar uma coluna sem conservar as suas combinações não garante junção sem perda.

O algoritmo de decomposição BCNF garante junção sem perda, mas pode perder preservação. Cobertura mínima: separa direitas, reduz esquerdas, retira DFs redundantes. Para testar redundância de uma DF, retira-a antes do fecho. No chase, mostra os tableaux sucessivos: cada unificação muda símbolos até estabilizar. Decomposição.

Álgebra relacional

OperadorEfeito
σp\sigma_pFiltra tuplos.
πX\pi_XEscolhe atributos e elimina duplicados.
ρ\rhoRenomeia relação ou atributos.
×\timesTodos os pares; cardinalidade mnm n.
⋈p\bowtie_pSeleção de pares que satisfazem p.
⋈\bowtieIgualdade de todos os nomes comuns; sem comuns, produto.
⋉p\ltimes_pConserva tuplos da esquerda com correspondência, sem colunas da direita.
γ\gammaAgrupa e agrega, extensão da álgebra clássica.
∪,∩,−\cup,\cap,-Esquemas compatíveis; diferença tem direção.
R(X,Y)÷S(Y)R(X,Y)\div S(Y)X ligados a todos os Y de S.

Divisão: candidatos πX(R)\pi_X(R); faltas (πX(R)×S)−R(\pi_X(R)\times S)-R; retira candidatos com faltas. Se S vazia, devolve πX(R)\pi_X(R). Para outro universo de candidatos, define-o explicitamente. Álgebra.

SQLite e SQL

  • PRAGMA foreign_keys = ON por ligação, antes da transação. FK composta declara-se em conjunto.
  • CHECK rejeita falso, não desconhecido. Usa NOT NULL para obrigatoriedade.
  • UNIQUE permite vários NULL. Em primárias textuais/compostas comuns, declara NOT NULL explicitamente.
  • INTEGER é afinidade em tabelas comuns; VARCHAR(20) não limita comprimento. STRICT tem outro contrato.
  • Na atribuição automática habitual, INTEGER PRIMARY KEY usa um id superior ao maior presente e pode reutilizar ids apagados. AUTOINCREMENT proíbe reutilização, com custo de sqlite_sequence.
  • 5 / 2 = 2; usa operando real para divisão real.
  • WHERE filtra linhas; HAVING filtra grupos. Não agregues depois de uma junção sem conferir a multiplicação de linhas.
  • COUNT(*) conta linhas; COUNT(x) ignora nulos; COUNT(DISTINCT x) ignora nulos e repetições.
  • Agregação vazia sem GROUP BY: COUNT = 0; SUM/AVG/MIN/MAX = NULL. Com GROUP BY, não há grupos.
  • LEFT JOIN conserva a esquerda. Filtros da direita no WHERE podem remover as linhas sem correspondência.
  • NULL = NULL é desconhecido; usa IS NULL. WHERE conserva apenas verdadeiro.
  • NOT IN com nulos pode não produzir a ausência pretendida. NOT EXISTS exprime ausência de correspondências.
  • “Todos” equivale a NOT EXISTS de uma falta, usando outro NOT EXISTS dentro. Requisitos vazios satisfazem a condição universal.
  • DISTINCT aplica-se à combinação completa. ORDER BY define a ordem; LIMIT 1 não resolve empates por si só.

DDL · Consultas · Subconsultas.

CTEs, vistas, gatilhos e acessos

CTE dura uma instrução. Recursão tem parte inicial, passo e prova de terminação. UNION elimina tuplos completos, não apenas o id; acrescentar profundidade pode impedir a eliminação de ciclos. D’Hondt: recursão só gera divisores 1..M; quocientes por produto cartesiano; top M com desempate explícito. Recursão.

Contagens em níveis diferentes usam agregações separadas antes da junção. Máximos por grupo exigem correlação pelo grupo; LIMIT 1 global não escolhe um máximo de cada grupo. Ao reunir origens, conserva (tipo,id) como identidade. Para A superar B em todos os grupos, procura um grupo sem comparação verdadeira, incluindo empate, desconhecido e resultado ausente. CTEs.

Vista virtual guarda uma pergunta; materializada guarda resultados. SQLite atualiza vistas através de INSTEAD OF, não automaticamente. Gatilhos SQLite são por linha: INSERT tem NEW, DELETE tem OLD, UPDATE tem ambos. UPDATE OF não prova mudança de valor. Prefere restrições declarativas. Vistas e gatilhos.

Validar compatibilidade e stock pode exigir BEFORE; debitar a inserção aceite usa AFTER. ABORT desfaz o lote inteiro e os seus gatilhos. Na mudança de quantidade da mesma reserva, usa disponibilidade stock + OLD.qtd e variação OLD.qtd - NEW.qtd. Gatilhos de inserção não tratam alterações e eliminações. Stock.

SQLite não tem GRANT/REVOKE/RLS. PostgreSQL separa privilégios, papéis e políticas por linha. RLS não concede privilégios; proprietário, superutilizador e BYPASSRLS têm regras de exceção. Parâmetros separam dados de código. Acessos.

Índices e transações

Índice não único acelera acesso, sem impor unicidade. Um composto ordena pela ordem das colunas; igualdade no prefixo e intervalo no seguinte são um padrão útil. Mais índices aumentam custo de escrita. Confere plano e distribuição. Índices.

ACID: atomicidade, consistência, isolamento, durabilidade. COMMIT confirma; ROLLBACK desfaz a transação; ROLLBACK TO regressa ao savepoint. Um erro SQLite pode desfazer só a instrução. Confere linhas afetadas e trata o erro antes de confirmar. Transações.

Concorrência

AnomaliaO que acontece
SujaLê alteração ainda não confirmada.
Não repetívelRelê a linha e observa outra versão confirmada.
FantasmaMuda o conjunto que satisfaz um predicado.
PerdidaUma escrita sobrepõe outra atualização.
Write skewEscritas em linhas distintas quebram uma regra conjunta.

Grafo: conflito é mesmo item e pelo menos uma escrita; aresta da operação anterior para a posterior. Sem ciclo, uma ordenação topológica dá a ordem serial equivalente; com ciclo, reprova. Snapshot estável não prova serializabilidade. PostgreSQL RR também evita fantasmas; serializable pode abortar e exige repetição. SQLite tem um escritor e pode rejeitar promoção de snapshot antigo. Isolamento.

Analítica e NoSQL

Define o grão antes das medidas. Factos ligam dimensões. Não somes saldos ao longo do tempo nem faças médias de percentagens sem pesos. Estrela tem dimensões diretas; floco normaliza dimensões; constelação partilha dimensões entre factos.

OLAP: roll-up agrega; drill-down detalha; slice fixa; dice restringe subconjuntos; pivot muda eixos. ROLLUP usa prefixos, CUBE todos os subconjuntos; não são comandos SQLite. Armazéns.

NoSQL inclui chave-valor, documentos, famílias de colunas e grafos. Esquema flexível não dispensa validação; NoSQL não exclui ACID. distinct devolve valores distintos; countDocuments conta documentos de um filtro. $lookup junta correspondências num array; $facet corre subpipelines independentes sobre a mesma entrada e devolve um documento com um array por saída. CAP trata consistência linearizável e disponibilidade durante uma partição, não a consistência de invariantes de ACID. Replicar copia; particionar distribui subconjuntos. NoSQL.

À 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.