A amplitude conceitual da área de banco de dados – processamento de consulta parte 1

Silberschatz et. al. (2006)

O que realmente sabemos sobre a área de banco de dados? Você já parou para pensar nisso? 

Se você é desenvolvedor de software garanto que tenha uma grande facilidade para a construção de consultas utilizando SQL. E por trás de uma SQL, o que existe? 

Uma subestrutura complexa que possibilita o seu processamento (vide figura). 

Neste e nos próximos post, vamos desvendar cada funcionalidade da referida subestrutura. 

Analisador / Tradutor 

Antes de ser processada, toda SQL, é analisada e transformada em uma expressão algébrica relacional, por exemplo: 

SELECT nome FROM tbCliente WHERE tipo = 1 

O analisador irá verificar se a construção sintática e semântica da consulta está correta, algo semelhante a compilação um determinado programa. 

A análise léxica 

A palavra SELECT está grafada corretamente? Em nosso exemplo sim. Porém, se por acaso você esquecer a letra T, o analisador irá retornar uma mensagem dizendo que SELEC não é um comando válido. 

Análise sintática 

Transforma um texto  em uma estrutura de dados caracterizada por uma árvore.  Neste caso o analisador irá analisar a seqüência das palavras da consulta. 

A análise semântica   

Tem como objetivos verificar erros semânticos, por exemplo a adição de dois tipos diferentes de dados. 

A tradução  

Existe uma série de operadores algébricos / relacionais, este texto apresenta dois deles: 

Projeção (responsável pela apresentação dos dados), representado pela letra grega π; 

Seleção (responsável pela seleção de algumas tuplas da tabela, dada uma determinada condição), representado pela letra grega σ; 

Exemplos: 

π  nome (tbClientes) 

– Projetamos o campo nome do cliente da tabela tbClientes. 

σ  tipo = 1 (tbClientes)  

– Selecionamos os clientes que possuem tipo = 1, neste caso todos os campos da tupla fazem parte da seleção. 

Traduzindo a SQL: 

A SQL apresentada no início do texto pode ser traduzida de duas formas: 

π  nome σ  tipo = 1   (tbClientes)  )  

– Selecionamos os clientes que possuem tipo = 1, ou seja, geramos um subconjunto e, posteriormente, projetamos somente o campo nome deste subconjunto. 

σ  tipo = 1  π  nome (tbClientes)  )  

-Selecionamos os clientes que possuem tipo = 1, ou seja, geramos um subconjunto e, posteriormente, projetamos somente o campo nome deste subconjunto. 

Para finalizar, questiono: Qual das traduções algébricas proporciona uma maior eficiência no processamento da consulta? 

Abraços 

fabri@utfpr.edu.br

3 Responses to “A amplitude conceitual da área de banco de dados – processamento de consulta parte 1”

  1. Muito bom Guto.
    A maioria das pessoas mal sabem escrever uma SQL decentemente, muito menos sabem o que existe por traz do “processo”.
    É comum pessoas chegarem aqui na IBM escrevendo coisas do tipo “select * from tabela”. Esse * mata os bancos! E isso é somente o exemplo mais comum…
    Abração

  2. brunocartaxo Says:

    O tópico é interessante porém acredito que a grafia da palavra reservada “SELECT” é verifica por uma fase dita, análise léxica, que antecede a sintática. Além disso, a ordem que as “palavras” estão dispostas é uma atribuição da análise síntatica e não da semântica, tendo em vista que é possível expressar a estrutura sintática de uma linguagem através de gramáticas livre de contexto fazendo uso de notaçãos como EBNF. A análise semântica entra em cena no momento de fazer verificação de tipos de dados, declaração de variáveis, dentre outros.

    Além dessas questões relacionadas a cálculo e álgebra relacional, outro assunto importante e muito negligenciado é o plano de execução de uma query. A falta de entendimento de conceitos como full table scan, index range scan, nested loops, sort aggregate, entre outros, contribui para a construção de consultas extremamente ineficientes.

    • José Augusto Fabri Says:

      Bruno, analisando melhor o texto, vejo que suas considerações são pertinentes. Agradeço a contribuição apontada. O texto será prontamente corrigido.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: