Álgebra Relacional – Parte I
Linguagem de consulta formal
Dando continuidade à série de artigos para que o internauta entre no mundo dos bancos de dados, sugiro que você leia meus dois primeiros artigos (Conceitos Fundamentais de Banco de Dados – Parte I e II) e também os artigos do Reinaldo Viana (Banco de Dados e Modelagem de Dados – Parte I, II e Final), para que haja uma perfeita compreensão dos conceitos e metodologias de um projeto de BD.
Darei continuidade falando sobre Linguagem de Consulta Formal, abordando a Álgebra Relacional.
Linguagens de consulta formal são linguagens em que o usuário solicita informações à base de dados. Geralmente formam uma linguagem de mais alto nível que as linguagens de programação.
A Álgebra Relacional é uma linguagem de consulta formal, porém procedimental, ou seja, o usuário dá as instruções ao sistema para que o mesmo realize uma seqüência de operações na base de dados para calcular o resultado desejado.
A Álgebra Relacional define operadores para atuar nas tabelas (semelhante aos operadores +, -, etc. da álgebra que estamos acostumados) para chegar ao resultado desejado.
A forma de trabalho desta linguagem de consulta é a de pegar uma ou mais tabelas (conforme necessidade) como entrada de dados e produzirá uma nova tabela como resultado das operações.
Funções da Álgebra Relacional
São definidas nove operações para se trabalhar com álgebra relacional:
- Union –União;
Intersection– Intersecção;
Difference– Diferença, Subtração;
Product – Produto, Produto Cartesiano.
Estas quatro operações são provenientes da teoria de conjuntos, da matemática.
- Select– Seleção;
Project– Projeção;
Join– Junção;
Divide – Divisão.
Aplicam-se especificamente ao modelo de dados relacional.
- Assignment– Designação, Atribuição.
É uma operação padrão das linguagens computacionais.
Utilizaremos a seguinte tabela como estudo de caso para exemplificar nossas operações:
EMPREGADO.
Atribuindo um valor a uma nova tabela
O objetivo do operador de designação/atribuição é atribuir o resultado de uma operação a uma nova relação.
Simbologia: <-------- Ex.: R <----- AUB
Sintaxe: := Ex.: R := union(B, C)
Operação de Seleção (Select)
É utilizada para selecionar um subconjunto de tuplas numa relação que satisfaça uma condição de seleção predefinida.
Representação gráfica:
Simbologia:
Sintaxe: (Relação)
Exemplo: sal>=2500 (EMPREGADO)
A seleção acima nos apresentará como resultado as informações abaixo:
Operação de Projeção (Project)
A operação de projeção é utilizada para selecionar determinadas colunas de uma relação. A operação é executada em apenas uma relação e o resultado é uma nova relação contendo apenas os atributos selecionados, eliminando-se as duplicidades.
Simbologia:
Sintaxe: (Relação)
Exemplo: NOME, SOBRENOME, SAL (EMPREGADO)
Teremos o seguinte resultado a partir da consulta acima:
NOME |
SOBREN |
SAL |
José |
da Silva |
7000 |
Cecília |
Ortiz Rezende |
3200 |
Pedro |
Silvestre |
2800 |
Felipe |
Guilhermino |
1800 |
Luciana |
Feitosa |
1500 |
Fabio |
Santos Silva |
1500 |
Elaine |
Cristina |
2500 |
Cleiton |
Fernandes |
2200 |
Aninhar de operações e renomear de atributos
Podemos aninhar as operações e produzir novos resultados sem a necessidade de sucessivas operações. Imaginem se nos interessa apenas o nome, sobrenome e salário dos funcionários do departamento número 3. Vejamos como ficaria a expressão em álgebra relacional:
1 =>Relação = Tabela, entidade, na terminologia formal de banco de dados.
2 =>Tupla = Linha da tabela, registro, na terminologia formal de banco de dados.
NOME, SOBRENOME, SAL (
DEPTO=3 (EMPREGADO)), que nos produziria o seguinte resultado:
NOME |
SOBREN |
SAL |
Cecília |
Ortiz Rezende |
3200 |
Felipe |
Guilhermino |
1800 |
Elaine |
Cristina |
2500 |
Cleiton |
Fernandes |
2200 |
Podemos ainda, criar relações intermediárias, dando um nome para cada uma delas e finalmente chegando ao resultado desejado:
R1 <---- DEPTO=3 (EMPREGADO)
E logo após:
RESULT <----- NOME, SOBRENOME, SAL (R1), onde RESULT produziria o mesmo resultado da expressão aninhada.
E finalmente, ainda podemos renomear os atributos que aparecerão na relação resultante, para isso, basta identificar o novo nome para os atributos:
RESULT(Nome, Sobrenome, Salário) <----- NOME, SOBRENOME, SAL (
DEPTO=3 (EMPREGADO))
Result:
NOME |
SOBREN |
SAL |
Cecília |
Ortiz Rezende |
3200 |
Felipe |
Guilhermino |
1800 |
Elaine |
Cristina |
2500 |
Cleiton |
Fernandes |
2200 |
Revendo a teoria dos conjuntos
Vamos descrever as funções da álgebra relacional pelas operações que vieram da teoria dos conjuntos:
União (Union)
O operador de união cria uma relação partindo de duas outras, levando as tuplas comuns e não comuns a ambas, desta forma aparecerão no resultado somente linhas únicas de uma ou outra relação e as informações duplicadas aparecerão somente uma vez.
Uma característica é que somente é possível utilizar este operador caso as tabelas de origem possuam compatibilidade de união, ou seja, as tabelas devem ser equivalentes e gerem o mesmo tipo de resultado.
Representação gráfica:
Simbologia: U
Sintaxe: (Relação 1)U(Relação 2)
Exemplo: Imagine que precisemos recuperar A identificação de todos os empregados que trabalham no departamento 3 ou supervisione diretamente um empregado que trabalhe no departamento 3. Faremos as seguintes operações:
DEPTO3 <---- DEPTO=3 (EMPREGADO)
DEPTO3
RESULT1 <---- ID_EMP (DEPTO3)
RESULT1
ID_EMP |
12584-7 |
17987-5 |
16257-2 |
15234-1 |
RESULT2 <---- ID_GER (DEPTO3)
RESULT2
ID_GER |
17206-2 |
12584-7 |
RESULT(ID) <----- (RESULT1)U(RESULT2)
RESULT
ID |
12584-7 |
17987-5 |
16257-2 |
15234-1 |
17206-2 |
Somente foi possível realizar a união entre RESULT1 e RESULT2, pois, apesar dos atributos serem diferentes, o número e o tipo de atributos são os mesmos, possibilitando uma compatibilidade de união.
Intersecção (Intersection)
A relação criada pela operação de intersecção será o resultado de todas as tuplas que pertençam a ambas as relações presentes na operação.
Representação gráfica:
Simbologia:
Sintaxe: (Relação 1)(Relação 2)
Como exemplo, considere as seguintes relações:
ALUNOS
NOME |
SOBRENOME |
Cecília |
Ortiz Rezende |
João |
da Silva |
Laura |
Nogueira |
Elaine |
Cristina |
Paulo |
Vidigal |
Pedro |
Teodoro |
Sandra |
Oliveira |
Marcio |
Santos |
Elisabeth |
de Souza |
INSTRUTORES
NOME |
SOBRENOME |
Joel |
Nunes |
Marcio |
Santos |
Paula |
Andrade |
Reinaldo |
Fagundes |
Cecília |
Ortiz Rezende |
Desta forma, uma operação de intersecção entre as duas relações, seria executada da seguinte forma:
RESULTADO <---- (ALUNOS) (INSTRUTORES) e produziria a seguinte relação:
RESULTADO
NOME |
SOBRENOME |
Marcio |
Santos |
Cecília |
Ortiz Rezende |
Uma observação extremamente relevante a ser feita é que ambas as operações de união ou intersecção são:
- Comutativas, ou seja, AUB = BUA e A
B = B
A;
Aplicadas a qualquer número de relações;
- Associativas, ou seja, AU(BUC) = (AUB)UC e A
(B
C) = (A
B)
C
Conclusões
Vimos neste artigo como efetuar consultas através da álgebra relacional.
É uma ferramenta bastante poderosa principalmente no auxílio à definição lógica de abordagem a dados em tabelas.
Fica claro que muitos conceitos trazidos da matemática tradicional são extremamente aplicáveis a esta técnica.
No próximo artigo veremos as quatro operações restantes: Difference e Product, da teoria de conjuntos e Join e Divide, específicas do modelo relacional.
Até a próxima.