Bancos de Dados Relacionais¶
Um banco de dados relacional representa dados como relações restringidas por um
esquema. SQL opera sobre conjuntos ou multiconjuntos de linhas; sem uma cláusula
ORDER BY, a ordem do resultado não é especificada.
Chaves e restrições¶
- uma chave primária identifica cada linha;
- uma chave estrangeira impõe um relacionamento com uma chave candidata;
- restrições unique, check e not-null protegem invariantes próximos aos dados;
- a validação da aplicação melhora o feedback, mas não substitui as restrições do banco sob concorrência.
Normalização¶
A normalização decompõe relações para reduzir redundância e anomalias de atualização. Dependências funcionais determinam se uma decomposição satisfaz formas como 3NF ou BCNF. A desnormalização é um compromisso de desempenho baseado em evidências que acrescenta obrigações de sincronização; não substitui o projeto do esquema.
Índices¶
Um índice troca armazenamento e manutenção nas escritas por caminhos de acesso. Um índice B-tree composto pode apoiar buscas que usem um prefixo útil da ordem de suas chaves, além de alguns padrões de intervalo e ordenação. A escolha do índice depende de estatísticas, seletividade, predicados, joins, ordenação e do otimizador.
Use EXPLAIN ou o recurso de planos do banco com dados representativos. “A
coluna possui índice” não prova que a consulta é eficiente. O guia de otimização de consultas
conecta planos e índices ao carregamento do ORM e a testes de regressão.
Projeto de consultas¶
- selecione apenas as colunas necessárias;
- torne determinística a ordem da paginação;
- prefira operações em conjuntos a viagens da aplicação por linha;
- entenda como
NULLafeta a lógica de três valores; - parametrize valores em vez de construir o texto SQL;
- inspecione cardinalidades e planos reais para consultas importantes.
Exercícios¶
- Identifique uma anomalia de atualização em uma relação desnormalizada.
- Projete um índice para igualdade em uma coluna e intervalo em outra.
- Explique por que a paginação por offset fica mais lenta e se desloca sob inserções concorrentes.