Determinar melhores práticas para código SQL ajuda na legibilidade do código, compreensão da lógica, manutenção, análises de causa raiz de erros e, até mesmo, na performance dos processos.
A padronização de processos também é fundamental para que novos colaboradores apreendam rapidamente o conteúdo dos códigos e para o compartilhamento de conhecimento entre diferentes áreas.
Cada ferramenta possui suas particularidades, mas você pode seguir as sugestões abaixo para criar um guia de melhores práticas para o seu projeto.
- Ordem das cláusulas
- Capitalização
- Chave Primária
- Comentários
- Convenção de nomenclaturas
- Configurações próprias da ferramenta
- Sinais e delimitação de texto
- Uso de alias em tabelas
- Uso de CTEs
- Uso de indentação
- Sintaxes explícitas
- Use mais linhas se for preciso
- Evitar SELECT *
- Filtrar dados o quanto antes
- Uso de CTEs
- Avaliar o uso de INNER JOIN x WHERE clause
- Preferir igualdades a LIKE
- Avaliar o uso de IN x EXISTS
Melhores Práticas de SQL – Scripting
Ordem das cláusulas
O script deve seguir a seguinte ordem de cláusulas, visando clareza da informação e performance:
- FROM: origem dos dados e joins
- WHERE: condições por linha
- GROUP BY: para realizar o cálculo de grupos e organizar de acordo com os valores existentes
- HAVING: condições por grupo
- ORDER BY: ordernação dos dados
Capitalização
Defina se as palavras chaves e funções devem ser capitalizadas ou não. Essa é uma das melhores práticas para SQL para manter a consistência entre ambientes, facilitar a escrita do código e aumentar a legibilidade.
Algumas ferramentas, como o dbt, tem como premissa que todo o código deve ser escrito em letras minúsculas.
Chave Primária
Nem sempre temos uma coluna com valores únicos para servir como chave primária. É interessante avaliar se a tabela contempla um conjunto de campos que possa ter essa função e garantir que essa informação faz sentido como chave primária.
Documente essa informação, uma vez que pode ser útil para avaliar a qualidade dos dados, definir testes de qualidade e para realizar a análise de causa raiz.
Comentários
Documente o código incluindo informações técnicas, de negócios, justificativas e outras informações importantes, especialmente para realizar a manutenção adequada do código. Essa é uma das melhores práticas para SQL
Convenção de nomenclaturas
Defina e documente convenções para nome de tabelas, schemas, colunas e outros items.
Por exemplo:
- Todos os campos de identificador começarão por “id_”
- Todos os campos de texto terminarão por “_text”
- Todas as tabelas auxiliares serão chamadas “aux__nome_da_tabela_final”
Configurações próprias da ferramenta
Cada vez mais as ferramentas de transformações de dados que permitem código incluem funções particulares da própria ferramenta, aumentando a performance e velocidade de processamento.
Nesses casos é de extrema importância aproveitar as configurações ideais para cada objetivo. Por exemplo, o dbt possui as funções ref() e source() para referenciar a origem dos dados e várias opções para carregamentos incrementais e materializações de tabelas.
Melhores Práticas de SQL – Legibilidade
Sinais e delimitação de texto
Para facilitar a legibilidade, uma das melhores práticas para SQL, é deixar um espaço entre sinais como: +, -, =
Também é interessante definir se os valores em formato de texto serão delimitados por aspas simples ou duplas, visando a padronização do código.
Uso de alias em tabelas
É comum utilizar mais de uma tabela para criar um código SQL. Nesses casos, e quando os nomes da tabelas acabam por ser grandes e complexos, deve-se utilizar aliases para simplificar a escrita do código.
Uso de CTEs
Leia mais sobre CTEs aqui.
Uso de indentação
Defina a melhor maneira para aplicar indentação no seu código. O uso dessa técnica é muito interessante quando há etapas complexas de transformação. É uma mais valia utilizar a indentação quando existem muitas condições e cláusulas a serem descritas.
Sintaxes explícitas
Prefira deixar claro qual o comando a ser utilizado e evite “atalhos”.
Use mais linhas se for preciso
Não há mal em fazer quebras de linhas no meio do código. Isso pode facilitar a legibilidade, por exemplo, quando tempos cláusulas de WHERE e CASE WHEN mais complexas.
Melhores Práticas de SQL – Performance
Para mais dicas de performance em banco de dados, clique aqui.
Evitar SELECT *
Uma das melhores práticas para SQL em termos de performance é definir exatamente quais campos devem ser buscados. Sendo assim, deve-se evitar o uso de SELECT * para que apenas as colunas de interesse sejam processadas.
Filtrar dados o quanto antes
Pela mesma lógica do ponto acima, filtre os dados o quanto antes, para que apenas a informação necessária seja processada. Isso reduz a necessidade de recursos computacionais e agiliza as transformações, uma vez que apenas as linhas que realmente importam serão avaliadas.
Uso de CTEs
Leia mais sobre CTEs aqui.
Avaliar o uso de INNER JOIN x WHERE clause
Em muitos casos, com apoio de CTEs, a filtragem de dados pode ser feita com inner joins ao invés de where clauses.
Utilizar inner joins permite que a relação entre tabelas seja mais clara, explícita e precisa, uma vez que a filtragem de linhas é baseada em campos que relacionam as tabelas. Além disso, a manutenção e alteração do código fica mais simples de ser realizada.
O uso de inner joins também é interessante quanto à integridade de dados. Where clauses podem lidar de forma imprecisa com valores nulos.
Preferir igualdades a LIKE
Uma melhor prática para SQL é utilizar igualdades nas condições por ser mais eficiente.
LIKE deve ser apenas usado para correspondência de padrões quando realmente necessário.
Avaliar o uso de IN x EXISTS
EXISTS/NOT EXISTS são mais eficientes para filtrar com referência a outra tabela porque uma vez que uma correspondência é encontrada, a busca é concluída. Isso é ideal para conjuntos de dados grandes ou com relações entre tabelas complexas. Essa função também não é afetados por valores nulos e são ideais para relações many-to-many.
IN/NOT IN são melhores para listas simples de valores estáticos. É uma função de compreensão mais simples, no entanto,pode ser menos eficiente e gerar problemas com listas maiores ou valores nulos.