Pular para conteúdo

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 NULL afeta 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

  1. Identifique uma anomalia de atualização em uma relação desnormalizada.
  2. Projete um índice para igualdade em uma coluna e intervalo em outra.
  3. Explique por que a paginação por offset fica mais lenta e se desloca sob inserções concorrentes.