Linguagem SQL: torne seu código SQL mais legível

Este artigo mostra algumas técnicas para tornar o código armazenado em scripts SQL mais “polido”, ou seja, mais adequado para receber modificações no futuro.

[rotulo-mentoring/][lead-mentoring]Fazer manutenção em código é essencial nos dias de hoje, devido à política de reaproveitamento de código. É necessário compreender a importância de tornar mais legível o código SQL armazenado dentro de scripts, evidenciando e incentivando a necessidade de implementação de técnicas para que profissionais consigam lidar com código legado que será executado no banco de dados. Este artigo é útil porque mostra algumas técnicas para tornar o código armazenado em scripts SQL mais “polido”, ou seja, mais adequado para receber modificações no futuro. A partir da aplicação das técnicas apresentadas nesse artigo, é possível lidar com aspectos não funcionais, tais como formatação, comentários, testes, organização e controle de modificações e versões de scripts SQL, de modo que a maneira de tratar esse importante artefato de software seja adequada.[/lead-mentoring]

Sempre houve a preocupação com diversos aspectos relacionados ao código fonte, desde a sua eficácia e eficiência até questões não técnicas. Entretanto, nos últimos anos a questão da manutenibilidade do código vem sendo tratada com mais cuidado. Modificações não funcionais podem ser aplicadas a códigos fonte para torná-los mais “polidos”, ou seja, bem apresentáveis. Esse polimento possui diversas vantagens, principalmente quando é necessário realizar modificações futuras que necessitam de compreensão profunda do que o código representa do ponto de vista de funcionalidades implementadas.

A partir desse contexto, esse artigo apresentará recomendações, sugestões e melhores práticas para tornar o código contendo instruções SQL mais simples e fácil de ser compreendido. A escolha da linguagem SQL se deve ao fato de que ela é o recurso computacional mais empregado para lidar com dados.

O foco desse artigo é apresentar técnicas e práticas para tornar mais fácil a compreensão do conteúdo de scripts que contêm comandos SQL, um dos artefatos mais comuns para quem trabalha com banco de dados no dia a dia. A partir da colocação em prática das técnicas apresentadas é possível melhorar e aprimorar tanto as habilidades necessárias para lidar com dados quanto a capacidade de compreender o código fonte armazenado dentro de um script SQL.

Formatação de texto SQL

Um script SQL geralmente contém instruções SQL, comandos condicionais, variáveis, comentários, palavras-chave e outros elementos textuais importantes para lidar com dados e representar a lógica de algum algoritmo. Contudo, muitas vezes nos deparamos com instruções complexas que ocupam muitas linhas e manipulam diversos objetos ao mesmo tempo.

Nesses casos é comum encontrar instruções SQL dentro do script que possuem várias cláusulas, opções e detalhes sem nenhum tipo de formatação. Essa falta de formatação torna difícil a compreensão e manutenção da instrução, pois é necessário esforço mental adicional para organizar os elementos em linhas e colunas diferentes antes de analisar o que realmente a instrução faz. Por exemplo, a instrução SELECT parcial da Listagem 1 contém várias cláusulas sem nenhum tipo de formatação, o que torna sua compreensão mais difícil, apesar da colorização de certos elementos sintáticos feita por alguma ferramenta IDE de edição de scripts, tal como o Management Studio fornecido com o SQL Server.

Listagem 1.Parte de uma instrução SELECT complexa e sem nenhuma formatação.

SELECT d2_grupo GRUPO, Cast(Sum(d2_total) AS NUMERIC(10,2))TOTAL, pa1_tbtrat TIPO FROM sd2tb0 D2, se1tb0 E1, pa1tb0 PA1 WHERE d2_emissao >= '20060201' AND d2_emissao <= '20060228' AND D2.d_e_l_e_t_ <> '*' AND PA1.d_e_l_e_t_ <> '*' AND E1.d_e_l_e_t_ <> '*' AND d2_cliente >= ' ' AND d2_cliente <= 'zzzzzz' AND Substring(e1_tipo, 1, 2) = 'NF' AND ei_contr <> '' AND d2_loja >= ' ' AND d2_loja <= ' ' AND e1_emissao = d2_emissao AND e1_parcela IN ('','A') AND e1_naturez NOT IN ('COFINS', 'PIS', 'CSLL', 'INSS') AND e1_num = d2_doc AND e1_contr <> '' AND pa1_contr = e1_contr AND d2_filial = 'EC' AND e1_contr >= ' ' AND e1_contr <= 'zzzzzzzz' AND sa1 -> a1_regiao >= '1 ' AND sa1 -> a1_regiao <= '1 ' GROUP BY pa1_tptrat, ...

Atualmente existem diversas ferramentas de terceiros que permitem a formatação de scripts e instruções SQL para torná-las mais fáceis de serem compreendidas e manipuladas. Essas ferramentas são chamadas de embelezadores de código (code beautifiers) e possuem como objetivo formatar o código fonte de modo a deixá-lo mais legível e de claro entendimento sem modifica-lo sintaticamente e semanticamente.

Por exemplo, o Instant SQL Formatter permite separar em linhas e colunas os elementos de uma instrução SELECT para facilitar a visualização. De fato, uma vez que se experimenta o uso em larga escala da formatação de SQL fica muito mais fácil compreender instruções SQL complexas. Por exemplo, essa ferramenta faz a formatação de instruções SELECT colocando colunas, tabelas e expressões da cláusula WHERE em linhas separadas, o que simplifica o processo de entendimento de quais objetos estão sendo utilizados. A Listagem 2 mostra como parte da instrução SQL da Listagem 1 ficaria após a formatação.

Listagem 2.Instrução SELECT daListagem 1formatada para facilitar a compreensão.

SELECT d2_grupo GRUPO, Cast(Sum(d2_total) AS NUMERIC(10,2))TOTAL, pa1_tbtrat TIPO FROM sd2tb0 D2, se1tb0 E1, pa1tb0 PA1 WHERE d2_emissao >= '20060201' AND d2_emissao <= '20060228' AND D2.d_e_l_e_t_ <> '*' AND PA1.d_e_l_e_t_ <> '*' AND E1.d_e_l_e_t_ <> '*' AND d2_cliente >= ' ' AND d2_cliente <= 'zzzzzz' AND Substring(e1_tipo, 1, 2) = 'NF' AND ei_contr <> '' AND d2_loja >= ' ' AND d2_loja <= ' ' AND e1_emissao = d2_emissao AND e1_parcela IN ('','A') AND e1_naturez NOT IN ('COFINS', 'PIS', 'CSLL', 'INSS') AND e1_num = d2_doc AND e1_contr <> '' AND pa1_contr = e1_contr AND d2_filial = 'EC' AND e1_contr >= ' ' AND e1_contr <= 'zzzzzzzz' AND sa1 -> a1_regiao >= '1 ' AND sa1 -> a1_regiao <= '1 ' GROUP BY pa1_tptrat, ..."

[...] continue lendo...

Artigos relacionados