Conteúdos da cadeira

Índices e transações

Quando indexar, ACID, concorrência e rollback explicado.

Markdown

Perguntar sobre esta página

ChatGPTClaudePerplexityGeminiCopiar e abrir

Envia o link e pede à IA para ler a página. No Gemini, cola a pergunta copiada.

Ver pergunta para copiar
Nesta página

Duas perguntas fecham a gestão da base de dados: como responder depressa quando as tabelas crescem, e como garantir que operações a meio não deixam a loja num estado impossível. A resposta à primeira é o índice (index); à segunda, a transação (transaction).

Índices: quando e qual

Sem índice, procurar as encomendas da Ana percorre a tabela Encomenda toda. Um índice na estrangeira cria uma estrutura de pesquisa por esse valor:

CREATE INDEX idx_encomenda_cliente ON Encomenda(idCliente);

Agora “encomendas do cliente 1” salta direto às linhas 100 e 101. A regra de escolha: indexa colunas que aparecem em condições de igualdade e junções frequentes, tipicamente chaves estrangeiras, e evita indexar tudo, porque cada índice atrasa escritas e ocupa espaço. A chave primária já traz índice próprio, por isso CREATE INDEX em id seria redundante. Perante “que índice crias para esta consulta?”, procura a coluna do WHERE ou do ON com mais repetições de pesquisa e menos escritas.

Transações e ACID

Uma venda é várias escritas que só fazem sentido juntas: inserir a encomenda, inserir as linhas e baixar o stock. Se o programa avariar a meio, a loja fica com encomenda sem stock abatido. A transação embrulha as escritas num bloco atómico com quatro propriedades, ACID: atomicidade (tudo ou nada), consistência (de estado válido em estado válido), isolamento (transações concorrentes não se veem a meio) e durabilidade (o confirmado sobrevive a falhas).

BEGIN;
INSERT INTO Encomenda VALUES (103, '2026-01-08', 2);
INSERT INTO Item VALUES (103, 12, 1);
UPDATE Produto SET stock = stock - 1 WHERE id = 12;
ROLLBACK;

O ROLLBACK anula tudo: a encomenda 103 desaparece e o stock do Monitor volta a 5, como se nada tivesse corrido. Troca por COMMIT e as três escritas tornam-se permanentes de uma vez. A concorrência entra aqui: dois caixas a vender o último Monitor ao mesmo tempo são duas transações sobre o mesmo stock, e o isolamento mais as restrições garante que uma delas falha em vez de venderem o mesmo exemplar duas vezes.

Ver o ficheiro no GitHub

À tua maneira

Escolhe como preferes ler.

Aparência
Ajustar cores e largura
Cor de destaque do tema FEUP
Tipo de letra

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

As tuas escolhas ficam guardadas neste navegador.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

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.