Cheat sheet
Definições, condições e padrões para rever o teste individual de bases de dados e aplicações web.
Requisitos e modelos
| Conceito | Fixar |
|---|---|
| Ator | Papel ou sistema externo; não um componente interno. |
| História | Quem, o que pretende e para quê; critérios de sucesso, falha e autorização. |
| Qualidade | Medida, limite, carga, dados e ambiente definidos. |
| Multiplicidade | Quantos objetos da extremidade para um do lado oposto; ler os dois sentidos. |
| Especialização | Total/partial e disjoint/overlapping são dimensões independentes. |
| N:N | Tabela associativa. O par só é chave se houver no máximo uma ocorrência por par. |
Requisitos, UML e esquema.
Restrições e normalização
| Regra | Condição |
|---|---|
| PK | Única e não nula. Outras chaves candidatas continuam a ser regras do domínio. |
| FK | A referência existe; não garante que cada pai tenha filhos. |
| CHECK | PostgreSQL aceita verdadeiro ou desconhecido. NOT NULL é independente. |
| UNIQUE | PostgreSQL permite vários NULL por defeito. |
| CASCADE | Propaga do objeto referenciado para as linhas que o referem. |
| X⁺ | Começa em X; aplica dependências até estabilizar. |
| Superchave / candidata | Determina todos os atributos / além disso é mínima por inclusão. |
| Atributo primo | Pertence a alguma chave candidata. |
| 1FN | Cada atributo tem um valor do seu domínio, sem grupos repetidos na mesma célula. |
| 2FN | 1FN e sem dependência parcial de não primos numa parte própria de uma chave candidata. |
| 3FN | 1FN e, para X→A não trivial, X é superchave ou A é primo. |
| BCNF | 1FN e, para X→Y não trivial, X é superchave. |
| Sem perda, binária | A interseção determina uma das relações, sob as dependências funcionais. |
| Preservação | Regras projetadas permitem verificar as originais sem junção. É uma propriedade diferente. |
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.
Índices e pesquisa
| Escolha | Condição |
|---|---|
| B-tree composto | Igualdades iniciais e intervalo seguinte limitam a região. Ordem das colunas importa. |
| Hash, PostgreSQL | Igualdade simples; não serve para intervalo ou ordem e não impõe UNIQUE. |
| Parcial | A consulta tem de permitir demonstrar o predicado do índice. |
| Por expressão | Adequado a consultas com a expressão correspondente. |
| PK / UNIQUE | Criam índice; FK no lado que referencia não cria índice automaticamente. |
| EXPLAIN | Estimativas; cost não são milissegundos. |
| EXPLAIN ANALYZE | Executa; observa tempos, rows e loops. Pode alterar dados. |
| Seq Scan | Pode ser mais barato mesmo com índice. |
| Texto | tsvector @@ tsquery; GIN pode apoiar correspondência; rank ordena. |
| Precisão / recall | Relevantes devolvidos / todos devolvidos; relevantes devolvidos / todos os relevantes. |
| Ranking | Correspondência depende da consulta; qualidade estática pode ser pré-calculada e atualizada. |
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.
HTTP, arquitetura e segurança
| Mecanismo | Fixar |
|---|---|
| GET/HEAD | Seguros e idempotentes. |
| PUT/DELETE | Idempotentes; respostas repetidas podem diferir. |
| POST/PATCH | Idempotência não garantida pelo método. |
| 401 / 403 | Autenticação necessária / operação recusada. |
| 303 / 304 | Redirecionar para GET / representação em cache válida. |
| no-cache / no-store | Guardar com validação / pedir que não se guarde. |
| Sessão | Identificador opaco no cliente; regenerar após autenticar. |
| HttpOnly | Impede leitura do cookie por JavaScript; não impede todas as ações de XSS. |
| Origem | Esquema, host e porta. CORS não é autenticação nem proteção completa CSRF. |
| MVC | Controlador coordena; modelo representa dados; vista produz representação; middleware e policies participam. |
| auth / policy / validate | Identidade / permissão sobre operação e objeto / domínio dos dados. |
| fillable | Atribuição em massa, não autorização. |
N+1 / @can em ciclo | Uma consulta inicial e uma por objeto; antecipa relações ou avalia a decisão fora do ciclo. |
| PHP | Variável de função é local; global é explícito. fn captura variáveis exteriores por valor. |
| SQL injection | Parâmetros para valores; lista autorizada para identificadores. |
| XSS | Codificação por contexto ou sanitização de HTML permitido. |
| CSRF | Token verificado no servidor e defesas complementares. POST sozinho não chega; Lax não cobre escritas por GET. |
| Palavra-passe | Hash próprio com salt e custo; password_verify, sem recuperar o original. |
Informação, cliente e NoSQL
| Conceito de IA | Fixar |
|---|---|
| Organização | Agrupar, rotular, navegar e pesquisar. Sitemap descreve a estrutura; wireframe, a página. |
| Wireflow | Liga esboços pelos controlos que iniciam transições; protótipo permite experimentar. |
| Navegação | Global, local e contextual. Personalização usa um modelo; customização dá controlo explícito. |
| Teste com utilizadores | Observar tarefas reais; distinguir o que a pessoa diz do que consegue fazer. |
| Cliente web | Fixar |
|---|---|
| Teclado | Tab 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. |
| CSS | li.destaque é o próprio li com a classe; li .destaque é um descendente. Espaço, > e + são descendente, filho e irmão seguinte. |
| JavaScript | var tem âmbito de função, let/const de bloco. Modo estrito recusa atribuir a nomes não declarados; const não congela objetos. |
| fetch | Pode resolver com erro HTTP; verifica ok/estado. Respostas podem chegar fora de ordem. |
| AJAX | Atualiza partes da página sem recarga completa; HTML, JSON e XML são contratos possíveis. Escolhe text()/json() pelo corpo. |
| Medição | Mede o percurso completo. Latência e débito (throughput) diferem; média e percentis também. |
| Armazenamento NoSQL | Fixar |
|---|---|
| Documentos | Embebidos aproximam leituras; referências evitam certas duplicações. |
| Atomicidade | A de um documento não implica a de vários. Verifica sistema e versão. |
| CAP | Durante partição, há conflito entre as garantias de consistência forte e disponibilidade; não é «escolher duas» sem contexto. |
| Cópia histórica | Preç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:
UKunicidade,NNobrigatório,DFomissão,CKverificação,->referência. Traduz cada marca paraUNIQUE,NOT NULL,DEFAULT,CHECKeREFERENCES. - Schema: base de dados contém schemas;
search_pathescolhe o schema ativo. CriaCREATE SCHEMA lbawXXgeSET search_path TO lbawXXg. - Sequências:
IDENTITYgera identificadores;RETURNING idlê o id da inserção;currvallê 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.