Cheat sheet

Definições, condições e padrões para rever o teste individual de bases de dados e aplicações web.

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Requisitos e modelos

ConceitoFixar
AtorPapel ou sistema externo; não um componente interno.
HistóriaQuem, o que pretende e para quê; critérios de sucesso, falha e autorização.
QualidadeMedida, limite, carga, dados e ambiente definidos.
MultiplicidadeQuantos objetos da extremidade para um do lado oposto; ler os dois sentidos.
EspecializaçãoTotal/partial e disjoint/overlapping são dimensões independentes.
N:NTabela associativa. O par só é chave se houver no máximo uma ocorrência por par.

Requisitos, UML e esquema.

Restrições e normalização

RegraCondição
PKÚnica e não nula. Outras chaves candidatas continuam a ser regras do domínio.
FKA referência existe; não garante que cada pai tenha filhos.
CHECKPostgreSQL aceita verdadeiro ou desconhecido. NOT NULL é independente.
UNIQUEPostgreSQL permite vários NULL por defeito.
CASCADEPropaga do objeto referenciado para as linhas que o referem.
X⁺Começa em X; aplica dependências até estabilizar.
Superchave / candidataDetermina todos os atributos / além disso é mínima por inclusão.
Atributo primoPertence a alguma chave candidata.
1FNCada atributo tem um valor do seu domínio, sem grupos repetidos na mesma célula.
2FN1FN e sem dependência parcial de não primos numa parte própria de uma chave candidata.
3FN1FN e, para X→A não trivial, X é superchave ou A é primo.
BCNF1FN e, para X→Y não trivial, X é superchave.
Sem perda, bináriaA interseção determina uma das relações, sob as dependências funcionais.
PreservaçãoRegras projetadas permitem verificar as originais sem junção. É uma propriedade diferente.

Normalização.

SQL

  • Ordem lógica: FROM/JOIN, WHERE, GROUP BY, HAVING, SELECT, DISTINCT, ORDER BY, LIMIT.
  • WHERE conserva verdadeiro; NULL em comparações dá desconhecido. Usa IS NULL.
  • COUNT(*) conta linhas; COUNT(coluna) conta valores não nulos. SUM vazio dá NULL.
  • LEFT JOIN conserva o lado esquerdo. Filtro da direita no WHERE pode eliminar as linhas sem correspondência.
  • NOT IN pode dar desconhecido com NULL. NOT EXISTS testa ausência de linhas.
  • «Todos»: não existe um candidato sem correspondência. Sobre conjunto vazio, pode aceitar por vacuidade, por isso verifica a condição de existência quando a pergunta a exige.
  • UNION elimina repetidos; UNION ALL conserva. Janela OVER mantém linhas; GROUP BY reduz grupos.
  • Álgebra relacional clássica usa conjuntos; SQL conserva repetidos por defeito.

Consultas.

Índices e pesquisa

EscolhaCondição
B-tree compostoIgualdades iniciais e intervalo seguinte limitam a região. Ordem das colunas importa.
Hash, PostgreSQLIgualdade simples; não serve para intervalo ou ordem e não impõe UNIQUE.
ParcialA consulta tem de permitir demonstrar o predicado do índice.
Por expressãoAdequado a consultas com a expressão correspondente.
PK / UNIQUECriam índice; FK no lado que referencia não cria índice automaticamente.
EXPLAINEstimativas; cost não são milissegundos.
EXPLAIN ANALYZEExecuta; observa tempos, rows e loops. Pode alterar dados.
Seq ScanPode ser mais barato mesmo com índice.
Textotsvector @@ tsquery; GIN pode apoiar correspondência; rank ordena.
Precisão / recallRelevantes devolvidos / todos devolvidos; relevantes devolvidos / todos os relevantes.
RankingCorrespondência depende da consulta; qualidade estática pode ser pré-calculada e atualizada.

Índices.

Transações

  • ACID: atomicidade, consistência, isolamento e durabilidade. Consistência exige invariantes e protocolo corretos.
  • COUNT num trigger não reserva capacidade. Duas transações podem observar o mesmo lugar livre.
  • Read Committed: snapshot por instrução. UPDATE condicionado da mesma linha coordena a reserva; verifica linhas afetadas.
  • Repeatable Read: snapshot estável em PostgreSQL, mas não garante ausência de toda a anomalia de serialização.
  • Serializable: pode abortar; repetir a transação completa com novo snapshot.
  • Deadlock: ciclo de espera; ordenar bloqueios reduz risco.
  • SAVEPOINT: ROLLBACK TO anula o que vem depois do ponto.
  • BEFORE por linha pode alterar NEW ou ignorar a linha devolvendo NULL. AFTER continua dentro da transação; não significa depois de COMMIT.
  • Trigger por instrução corre mesmo com zero linhas afetadas. OLD/NEW dependem da operação.
  • Pagamento externo não é anulado pelo ROLLBACK da base de dados.
  • PostgreSQL: função participa em expressões; procedure usa CALL. Controlo transacional interno tem condições; não generalizar para outro SGBD.

Concorrência.

HTTP, arquitetura e segurança

MecanismoFixar
GET/HEADSeguros e idempotentes.
PUT/DELETEIdempotentes; respostas repetidas podem diferir.
POST/PATCHIdempotência não garantida pelo método.
401 / 403Autenticação necessária / operação recusada.
303 / 304Redirecionar para GET / representação em cache válida.
no-cache / no-storeGuardar com validação / pedir que não se guarde.
SessãoIdentificador opaco no cliente; regenerar após autenticar.
HttpOnlyImpede leitura do cookie por JavaScript; não impede todas as ações de XSS.
OrigemEsquema, host e porta. CORS não é autenticação nem proteção completa CSRF.
MVCControlador coordena; modelo representa dados; vista produz representação; middleware e policies participam.
auth / policy / validateIdentidade / permissão sobre operação e objeto / domínio dos dados.
fillableAtribuição em massa, não autorização.
N+1 / @can em cicloUma consulta inicial e uma por objeto; antecipa relações ou avalia a decisão fora do ciclo.
PHPVariável de função é local; global é explícito. fn captura variáveis exteriores por valor.
SQL injectionParâmetros para valores; lista autorizada para identificadores.
XSSCodificação por contexto ou sanitização de HTML permitido.
CSRFToken verificado no servidor e defesas complementares. POST sozinho não chega; Lax não cobre escritas por GET.
Palavra-passeHash próprio com salt e custo; password_verify, sem recuperar o original.

HTTP, Laravel e segurança.

Informação, cliente e NoSQL

Conceito de IAFixar
OrganizaçãoAgrupar, rotular, navegar e pesquisar. Sitemap descreve a estrutura; wireframe, a página.
WireflowLiga esboços pelos controlos que iniciam transições; protótipo permite experimentar.
NavegaçãoGlobal, local e contextual. Personalização usa um modelo; customização dá controlo explícito.
Teste com utilizadoresObservar tarefas reais; distinguir o que a pessoa diz do que consegue fazer.
Cliente webFixar
TecladoTab percorre focáveis, não todos os títulos. Rótulos, erros e foco têm de ser reconhecíveis.
Leitor de ecrãApresenta voz ou braille e navega pela estrutura semântica; nav e cabeçalhos transmitem papéis.
CSSli.destaque é o próprio li com a classe; li .destaque é um descendente. Espaço, > e + são descendente, filho e irmão seguinte.
JavaScriptvar tem âmbito de função, let/const de bloco. Modo estrito recusa atribuir a nomes não declarados; const não congela objetos.
fetchPode resolver com erro HTTP; verifica ok/estado. Respostas podem chegar fora de ordem.
AJAXAtualiza partes da página sem recarga completa; HTML, JSON e XML são contratos possíveis. Escolhe text()/json() pelo corpo.
MediçãoMede o percurso completo. Latência e débito (throughput) diferem; média e percentis também.
Armazenamento NoSQLFixar
DocumentosEmbebidos aproximam leituras; referências evitam certas duplicações.
AtomicidadeA de um documento não implica a de vários. Verifica sistema e versão.
CAPDurante partição, há conflito entre as garantias de consistência forte e disponibilidade; não é «escolher duas» sem contexto.
Cópia históricaPreço pago registado na compra permanece após mudança do preço atual; decide por campo se o valor acompanha mudanças ou preserva contexto.

Informação, desempenho e NoSQL.

Notação A5, schema e sequências

  • A5: UK unicidade, NN obrigatório, DF omissão, CK verificação, -> referência. Traduz cada marca para UNIQUE, NOT NULL, DEFAULT, CHECK e REFERENCES.
  • Schema: base de dados contém schemas; search_path escolhe o schema ativo. Cria CREATE SCHEMA lbawXXg e SET search_path TO lbawXXg.
  • Sequências: IDENTITY gera identificadores; RETURNING id lê o id da inserção; currval lê o último valor obtido pela ligação atual. Exige utilização prévia da sequência nessa ligação; números consumidos não são recuperados por ROLLBACK.
  • A6: cada transação declara e justifica o isolamento; população em script separado da criação.

Referências, agregados e integração

  • FK composta: exige o par na mesma linha referida. Duas FKs independentes não garantem pertença entre componentes. NOT NULL é necessário em ambos se forem obrigatórios; MATCH SIMPLE dispensa correspondência quando algum é NULL. Confere o efeito de eliminar a linha referida.
  • Duas relações 1:N: a junção multiplica ocorrências antes de somar. Agrega cada relação por sessão antes de as juntar. SUM DISTINCT elimina preços iguais de compras legítimas; não é uma correção geral.
  • Cancelamento: liga libertação de capacidade ao RETURNING da transição reservada para cancelada do comprador autenticado. Repetição não produz transição; uma falha do contador anula a instrução inteira.
  • Trigger em lote: ROW dispara por linha processada, mesmo se o valor ficar igual; STATEMENT dispara também com zero linhas. O teste de mudança real pode impedir a ação sem impedir a ativação.
  • Protótipo vertical: demonstra uma história através de interface, HTTP, autorização, regra e persistência. Verifica recarregamento, repetição e pedido direto de outra pessoa. Não confundir sucesso visual com escrita confirmada.

Referência a um par, agregação sem multiplicação, cancelamento e protótipo vertical.

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