Cheat sheet
Chaves, formas normais, decomposição, álgebra, SQL, isolamento e decisões de desenho.
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ção | Tradução e cuidado |
|---|---|
| Classe | Relação com atributos e chave. Um nome repetível não identifica um objeto. |
| 1:N | FK no lado N; NOT NULL se tiver de referenciar alguém. Não obriga cada objeto do lado 1 a participar. |
| N:M | Relação da associação, FKs e chave segundo as multiplicidades. Atributos da ligação ficam aqui. |
| 1:1 | FK com UNIQUE; NOT NULL para obrigatoriedade no lado que a guarda. |
| Ternária | Relação com os participantes. Multiplicidade num lado conta-o para um par fixo dos outros dois. |
| Generalização | Por 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
significa que concordar em X obriga a concordar em Y em todas as instâncias válidas.
Para , 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 ; testar redundância sem retirar a DF antes do fecho.
| Forma | Critério |
|---|---|
| 1FN | Valores atómicos no modelo, sem grupos repetidos. |
| 2FN | Não primo não depende de parte própria de candidata. |
| 3FN | Para cada DF não trivial , X é superchave ou A é primo. |
| BCNF | Em toda a DF não trivial, X é superchave. |
Pode haver 3FN sem BCNF: , , candidatas AB e AC. C não é superchave, mas B é primo. Classificação.
Decomposição
| Objetivo | Como conferir |
|---|---|
| Sem perda, binária | O comum determina um dos lados: ou . |
| Sem perda, geral | Chase. Unifica pelas DFs; procura uma linha só com símbolos distinguidos. |
| Preservar DFs | A união das projeções implica as DFs originais. Confere por fechos. |
| BCNF | Pela violação , separa e ; projeta e repete. |
| Síntese 3FN | Cobertura 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
| Operador | Efeito |
|---|---|
| Filtra tuplos. | |
| Escolhe atributos e elimina duplicados. | |
| Renomeia relação ou atributos. | |
| Todos os pares; cardinalidade . | |
| Seleção de pares que satisfazem p. | |
| Igualdade de todos os nomes comuns; sem comuns, produto. | |
| Conserva tuplos da esquerda com correspondência, sem colunas da direita. | |
| Agrupa e agrega, extensão da álgebra clássica. | |
| Esquemas compatíveis; diferença tem direção. | |
| X ligados a todos os Y de S. |
Divisão: candidatos ; faltas ; retira candidatos com faltas. Se S vazia, devolve . Para outro universo de candidatos, define-o explicitamente. Álgebra.
SQLite e SQL
PRAGMA foreign_keys = ONpor ligação, antes da transação. FK composta declara-se em conjunto.CHECKrejeita falso, não desconhecido. UsaNOT NULLpara obrigatoriedade.UNIQUEpermite váriosNULL. Em primárias textuais/compostas comuns, declaraNOT NULLexplicitamente.INTEGERé afinidade em tabelas comuns;VARCHAR(20)não limita comprimento.STRICTtem outro contrato.- Na atribuição automática habitual,
INTEGER PRIMARY KEYusa um id superior ao maior presente e pode reutilizar ids apagados.AUTOINCREMENTproíbe reutilização, com custo desqlite_sequence. 5 / 2 = 2; usa operando real para divisão real.WHEREfiltra linhas;HAVINGfiltra 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. ComGROUP BY, não há grupos. LEFT JOINconserva a esquerda. Filtros da direita noWHEREpodem remover as linhas sem correspondência.NULL = NULLé desconhecido; usaIS NULL.WHEREconserva apenas verdadeiro.NOT INcom nulos pode não produzir a ausência pretendida.NOT EXISTSexprime ausência de correspondências.- “Todos” equivale a
NOT EXISTSde uma falta, usando outroNOT EXISTSdentro. Requisitos vazios satisfazem a condição universal. DISTINCTaplica-se à combinação completa.ORDER BYdefine a ordem;LIMIT 1nã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
| Anomalia | O que acontece |
|---|---|
| Suja | Lê alteração ainda não confirmada. |
| Não repetível | Relê a linha e observa outra versão confirmada. |
| Fantasma | Muda o conjunto que satisfaz um predicado. |
| Perdida | Uma escrita sobrepõe outra atualização. |
| Write skew | Escritas 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.