Conhecendo a Álgebra Relacional para consulta de dados relacionais
Por que aprender Álgebra Relacional é importante para quem estuda ou trabalha com banco de dados relacionais?
Ou melhor: sabia que estudar Álgebra relacional pode te ajudar (e muito!) com os fundamentos das linguagens de consultas de banco de dados, como, por exemplo, SQL?
Neste artigo, vou te apresentar a Álgebra relacional que é a base teórica da linguagem SQL e as razões para você incluí-la no seu plano de estudos de base de dados relacional, pensando sempre em extrair informações valiosas dos dados.
Então, boa leitura e vem comigo!
Contexto inicial - Dados
A Buscante é um e-commerce de livros que está implementando uma base de dados relacional para manter as informações dos livros, do estoque, das vendas e de seus clientes.
Foi feita uma entrevista que mapeou as principais tabelas, suas colunas e os relacionamentos necessários para atender as demandas da empresa no momento.
No mapeamento podemos identificar 7 tabelas (relações) sobre clientes, livros, editoras, vendas e estoque.
Os clientes têm detalhes como nome, email e endereço, cada cliente está sendo identificado por um código único.
Há tabelas separadas para pessoas físicas e jurídicas, compartilhando o mesmo código de cliente como chave estrangeira.
Os livros são registrados unicamente por um código e ainda é possível acessar o título, categoria, preço, isdin, ano da publicação, preço, autoria e código da editora. A relação entre livros e editoras é de muitos para um.
As editoras têm detalhes como contrato e contato, identificadas por um código único.
O estoque controla a quantidade de cada livro em cada editora.
A tabela de vendas registra todas as transações, incluindo cliente, livro, quantidade vendida, e data da compra com chaves estrangeiras referenciando as tabelas de Clientes e Livros.
A partir desse mapeamento percebemos que as informações estão mantidas em lugares distintos e possuem relações entre si.
Como um guarda-roupa onde cada lugar tem uma coisa específica, no entanto precisamos entender como consultar essas informações, afinal não adianta nada poder salvar os dados para sempre, se a gente não puder acessá-los, né?
Principais comandos da Álgebra Relacional
Uma forma de acessar os dados é utilizando a Álgebra Relacional, uma linguagem formal e teórica que apresenta possibilidades de manusear dados relacionais.
Vamos fazer perguntas para nosso modelo e entender como essas perguntas são traduzidas utilizando a Álgebra Relacional?
Quais são os livros com preço entre R$30 e R$50?
Para responder essa pergunta, precisamos identificar que estamos filtrando um grupo de livros baseado em uma condição.
Ou seja, imaginando um universo de livros com diferentes valores, queremos apenas aqueles que obedecem essa faixa de preço, podendo ser mais caros que 30 reais e sendo mais baratos que 50 reais, o resultado esperado é uma tabela que obedeça esse critério, nesse caso utilizaremos a seleção (σ) que é exclusiva para filtrar linhas a partir de uma critério.
π titulo, preco (σ preco ≥ 30 ∧ preco ≤ 50 (Livros))
Primeiro, a seleção (σ) é aplicada à tabela Livros
, onde apenas as linhas com o preço entre 30 e 50 são mantidas, isso é feito pois estamos filtrando preço maior ou igual a 30 (preco ≥ 30) e menor que 50 (preco ≤ 50), repare que essas duas condições foram unidas com o símbolo reservado (∧) que pode ser ‘aportuguesado’ para conjunção “e”, ou seja, precisamos que as duas condições de preço sejam verdadeiras.
Depois que aplicamos um filtro na tabela Livros
, queremos apenas a listagem do nome e seus respectivos preços, nesse caso escolhemos apresentar apenas as colunas título e preço dessa tabela filtrada e para isso utilizamos o operação projeção (π).
Qual o nome dos livros vendidos?
Se você perceber no mapeamento das tabelas o nome dos livros está armazenado na tabela “Livros” dentro da coluna “título”, mas o registro de vendas, não possui essa informação, para nossa sorte a tabela Livros
e Vendas
possui um relacionamento através do código do livro.
E é dessa relação entre tabelas que iremos construir nossa expressão algébrica relacional.
π id_pedido, titulo (Livros ⨝ Vendas)
Para responder a pergunta, primeiro juntamos as tabelas Livros
e Vendas
usando a junção natural (⨝), isso gera uma tabela temporária a qual aplicamos a operação de projeção (π) para selecionar apenas as colunas id_pedido
e titulo
dessa junção. O resultado disso é uma tabela final com o nome dos livros armazenados na tabela Livros
que foram registrados no histórico de Vendas
a qual possui id_pedido
.
Quais são os possíveis livros que cada cliente pode comprar do catálogo da Buscante?
Para saber as possibilidades de compras que cada cliente possui, precisamos combinar todas as linhas das tabelas "Cliente" com as dos livros disponíveis na tabela "Livros", esse procedimento pode ser realizado através da operação produto cartesiano representado pelo símbolo “⨯”.
π nome, titulo (Livros ⨯ Cliente)
Combinando as duas tabelas com o produto cartesiano (Livros ⨯ Cliente), temos uma tabela enorme com a combinação dos registros de ambas as tabelas, aplicando a projeção (π), teremos como resultado uma lista dos nomes dos clientes repetido para cada nomes dos livros, dessa forma teremos os livros que cada cliente pode comprar do catálogo da Buscante.
O exercício que fizemos aqui foi ‘traduzir’ os questionamentos de negócio do português para essa nova linguagem de acesso aos dados chamada Álgebra Relacional.
Usamos as operações seleção (σ), projeção (π), produto cartesiano (⨯) e junção natural (⨝) nesse processo. No entanto, podemos resumir e definir essas e outras operações da Álgebra Relacional conforme o diagrama abaixo:
Principais comandos da Álgebra relacional
- Seleção (σ): Seleciona linhas (tuplas) que atendem a uma condição específica.
- Projeção (π): Seleciona colunas (atributos) específicas de uma tabela (relação).
- União (∪): Combina duas tabelas (relações) para produzir uma tabela (relação) que contém todas as linhas (tuplas) de ambas as tabelas (relações), eliminando duplicatas.
- Interseção (∩): Retorna as linhas (tuplas) que são comuns a duas tabelas (relações).
- Diferença (-): Retorna as linhas (tuplas) que estão em uma tabela (relação), mas não em outra.
- Produto Cartesiano (×): Combina todas as linhas (tuplas) de uma tabela (relação) com todas as linhas (tuplas) de outra tabela (relação).
- Junção (⨝): Combina duas tabelas (relações) com base em uma condição de igualdade.
- Divisão (÷): Retorna as linhas (tuplas) que estão presentes em uma tabela (relação) para cada valor de atributo em outra tabela (relação).
- Confira outras operações neste cheatsheet.
A lógica de tabelas, linhas e colunas é bem compreendida principalmente quando falamos de dados estruturados em uma planilha, por exemplo.
Porém vale lembrar que a Álgebra Relacional tem seus conceitos próprios, por isso, nas definições de suas operações é natural observarmos que ao invés de usar os termos tabelas, linhas e colunas, usamos relação, tuplas e atributos respectivamente.
Álgebra Relacional e o SQL
Você deve estar se perguntando, qual a diferença da Álgebra Relacional, essa linguagem formal, e o SQL, que é a linguagem usada nos SGBD como o MySQL, por exemplo?
É válido lembrar que Álgebra Relacional surgiu em 1970 por Codd e inspirou a criação do SQL que foi comercialmente lançada em 1979, é importante ter em mente essa linha do tempo porque uma linguagem influenciou a outra, enquanto a Álgebra Relacional estabeleceu uma base teórica sólida para os bancos de dados relacionais, o SQL bebe dessa fonte e entrega uma linguagem de consulta e manipulação de dados mais prática e acessível.
Querendo ou não o SQL tem a influência dos conceitos e formalidades da Álgebra Relacional, inclusive podemos visualizar abaixo uma tabela comparativa de alguns comandos dessas linguagens.
Apesar da Álgebra Relacional ser a precursora na interação com dados relacionais, o SQL difunde essa prática uma vez que estando integrado aos SGBD’s permite para os diferentes tipos de usuários consultar dados, inserir novos registros, atualizar informações existentes, excluir dados.
Além disso, novos comandos foram surgindo ao longo do tempo para realizar todas operações possíveis em um banco de dados relacional.
SQL | Álgebra Relacional |
---|---|
SELECT | Projeção (π) |
WHERE | Seleção (σ) |
UNION | União (∪) |
INTERSECT | Interseção (∩) |
EXCEPT | Diferença (-) |
JOIN | Junção (⨝) |
CROSS JOIN | Produto Cartesiano (×) |
Para você que busca práticar a comparação desses comandos, você pode utilizar o Relax, um ambiente de desenvolvimento online focado na aprendizagem das operações de Álgebra Relacional e SQL.
No Relax, é possível carregar tabelas, estabelecer relações e utilizar essas e outras operações para visualizar dados relacionais, uma excelente dica para quem procura exercitar os comandos, sobretudo da álgebra relacional, em um ambiente online longe de papel da caneta.
Por que estudar Álgebra Relacional?
Nessa altura da leitura, você deve ter percebido que a Álgebra Relacional é um conceito, é uma abstração, é um fundamento para a criação de várias operações internas dos SGBDs, inclusive é um assunto que compõe a matriz curricular tradicional do ensino de banco de dados relacional e que muitas vezes é mais popular no ambiente acadêmico.
Então, se é um conhecimento nichado, por que eu deveria incluí-lo no meu plano de estudos sobre banco de dados? Segue o fio para algumas razões:
Domínio da linguagem fundamental de Bancos de Dados
A Álgebra Relacional é a base teórica para linguagens de consulta como SQL, permitindo a manipulação e análise de dados em bancos de dados relacionais.
Compreender a Álgebra Relacional fornece uma base sólida para construir e otimizar consultas complexas, extraindo informações valiosas dos dados.
Nesse fórum, é discutida a importância da compreensão da álgebra relacional e da base matemática para implementar um banco de dados SQL.
Surpreendentemente, a resposta mais votada traz outros questionamentos: "Quão importante é entender a ortografia e a gramática para ser um escritor? Quão importante é entender a física elétrica para ser um eletricista?"
Isso nos mostra a necessidade de equilibrar teoria e prática. Embora seja possível trabalhar com banco de dados sem estudar álgebra relacional, compreender sua base teórica pode facilitar a resolução de problemas complexos.
Capacidade de inovação e criação de soluções:
Para quem acompanha as literaturas formais, os autores Navathe e Elmasri no livro “Sistema de Banco de Dados”, referência no tema, pontua:
“Álgebra Relacional é o alicerce formal para as operações do modelo relacional”, além disso “alguns de seus conceitos são incorporados na linguagem de consulta padrão Structured Query Language (SQL) para Sistemas de Gerenciamento de Banco de Dados (SGBD)”
Entender que a álgebra relacional é rodada por trás dos panos quando executamos uma query em SQL pode te ajudar a montar consultas ainda mais eficientes, pois se você já conhece o que foi criado isso pode dar espaço para inovar e atuar naquilo que ainda não tem solução
No tópico que citei o autor fecha como uma reflexão interessante, que em tradução livre fica: “Você pode seguir receitas, mas é só isso.
Para poder inovar e criar novas soluções, você precisa ter tanto teoria quanto prática.”
Utilizar as propriedades algébricas:
Esse outro tópico do fórum Database Administrators Stack Exchange também traz um ponto relevante a se considerar.
A Álgebra Relacional possui operadores sujeitos a propriedades algébricas semelhantes às da álgebra tradicional.
Isso significa que podemos aplicar certas leis universais a qualquer relação, independente dos dados específicos.
Por exemplo, a associatividade da junção natural permite reorganizar a ordem das operações sem alterar o resultado, proporcionando flexibilidade na formulação de consultas.
Otimização de consultas
Compreender a Álgebra Relacional pode ajudar na otimização de consultas. Ao conhecer as propriedades algébricas dos operadores, é possível reescrever formulações de consulta de maneiras equivalentes, mas potencialmente mais eficientes.
Isso é especialmente útil quando se enfrenta problemas de desempenho em consultas mal formuladas, permitindo uma abordagem mais estratégica na resolução de questões de otimização.
Em resumo, as funcionalidades da álgebra relacional desempenham um papel crucial na estruturação das soluções em Sistemas de Gerenciamento de Banco de Dados (SGBD), especialmente no contexto das consultas em bancos de dados relacionais.
Compreender suas operações é essencial para dominar os conceitos do SQL, criar consultas eficientes e aprofundar o entendimento sobre o funcionamento de um SGBD.
Embora o SQL seja uma linguagem teórica, essa compreensão teórica pode enriquecer significativamente a prática, como ilustrado pela famosa metáfora de Leonardo da Vinci sobre a interconexão entre teoria e prática: “Aquele que ama a prática sem a teoria é como o marinheiro que embarca sem leme e bússola e nunca sabe onde pode atracar.”
Pratique mais
E aí, Gostou de conhecer melhor as raízes do SQL? Já conhecia as operações e funções da Álgebra Relacional?
Se você ficou com curiosidade para colocar a mão na massa nessa linguagem então acesse o curso Modelagem de banco de dados relacional: álgebra relacional.
E para um conhecimento aprofundado em Modelagem de Dados acesse a Formação Modelagem de dados da Alura.
Créditos
- Conteúdo: Ana Duarte
- Produção técnica: Daniel Siqueira
- Produção didática: Tiago de Freitas
- Designer gráfico: Alysson Manso
- Apoio: Rômulo Henrique