Home - www.devmedia.com.br


Á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 <----- A B
Sintaxe: <tabela_resposta> := <operação> 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: <condição de seleção> (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: <lista de atributos> (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:
Sintaxe: (Relação 1) (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) (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, A B = B A e A B = B A;
    Aplicadas a qualquer número de relações;

  • Associativas, ou seja, A (B C) = (A B) C 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.

 

 

Ricardo Rezende (ricardo@sqlmagazine.com.br) é DBA Oracle na IBM do Brasil em projeto internacional, possui cursos oficiais pela Oracle University, consultor independente de Bancos de Dados, subeditor da revista SQL Magazine, editor do Website da SQL Magazine e professor licenciado pelo Centro Estadual de Educação Tecnológica “Paula Souza” na unidade de Taubaté-SP.

  ARTIGOS    
  Oracle 9i – Conexões de rede, Parte V    
  SQL Magazine Tech Day    
  Oracle 9i – Conexões de rede, Parte IV    
  Oracle 9i – Conexões de rede, Parte III    
  Boas-Vindas do Editor    
  Oracle 9i – Conexões de rede, Parte II    
  Oracle 9i – Conexões de rede, Parte I    
  II CONISLI – 2º Edição do Congresso Internacional de Software Livre    
  RAID – Parte IV
Recomendações de mais Fabricantes
   
  Oracle Open World
   
  Raid - Parte 3
Recomendações dos Fabricantes

   
  Raid - Parte 2
Armazenamento com segurança,
performance e baixo custo

   
  Bases de Dados em Linux
2º edição do evento
   
  Raid - Parte 1
Armazenamento com segurança, performance e baixo custo
   
  Álgebra Relacional – Parte II
Linguagem de consulta formal
   
  Álgebra Relacional – Parte I
Linguagem de consulta formal
   
  Conceitos Fundamentais de Banco de Dados - Parte 2    
  Conceitos Fundamentais de Banco de Dados - Parte 1    
  VIDEO-AULAS    
  Bind Variables no BD Oracle    
       
     

 

Todos os direitos reservados: DevMedia Group
SQL Magazine - 2004