Home - www.devmedia.com.br


Álgebra Relacional – Parte II
Linguagem de consulta formal

Nesta segunda e última parte de artigos sobre álgebra relacional, iremos abordar as duas últimas instruções provenientes da teoria de conjuntos, as operações Difference e Product, e também as duas operações restantes que interagem com o modelo relacional, Join e Divide.

O bom entendimento de como os operadores de álgebra relacional trabalham, facilitam muito a muito na construção de boas consultas em linguagens como SQL, por exemplo.
Aproveitem a navegação.

Operação de Diferença (Difference)

A operação de diferença consiste em obter uma relação a partir da diferença da primeira pela segunda relação.

É importante salientar que a diferença entre a primeira e segunda relação não é o mesmo do inverso, ou seja, da segunda pela primeira. Com isso podemos dizer que a operação de diferença não é comutativa.

Exemplificando, poderíamos dizer que A – B é diferente de B – A.

Simbologia:
Sintaxe: (Relação 1) (Relação 2)
Como exemplo, considere as relações vistas no artigo anterior:

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

Exemplo 1:

Result1 <----- ALUNOS INSTRUTORES

RESULT1

NOME
SOBRENOME
João
da Silva
Laura
Nogueira
Elaine
Cristina
Paulo
Vidigal
Pedro
Teodoro
Sandra
Oliveira
Elisabeth
de Souza

Exemplo 2:

Result2 <----- INSTRUTORES ALUNOS

RESULT2

NOME
SOBRENOME
Joel
Nunes
Paula
Andrade
Reinaldo
Fagundes

Operação de Produto Cartesiano (Product)

O Produto Cartesiano é a combinação de tuplas das duas relações em questão.
O resultado é que, para cada tupla da primeira relação, haverá a combinação com todas as tuplas da segunda relação, e vice-versa.

Simbologia: x
Sintaxe: (Relação 1) x (Relação 2)
Como exemplo, considere as relações abaixo:

ALUNOS

NOME
SOBRENOME
Cecília
Ortiz Rezende
João
da Silva
Laura
Nogueira
Elaine
Cristina

DISCIPLINA

COD_DISC
DESCRICAO
1
Fundamentos de Bando de Dados
2
Linguagem de Programação
3
Introdução aos Sistemas Operacionais

RESULT <----- ALUNOS X INSTRUTORES

RESULT

NOME
SOBRENOME
COD_DISC
DESCRICAO
Cecília
Ortiz Rezende
1
Fundamentos de Bando de Dados
Cecilia
Ortiz Rezende
2
Linguagem de Programação
Cecilia
Ortiz Rezende
3
Introdução aos Sistemas Operacionais
João
da Silva
1
Fundamentos de Bando de Dados
João
da Silva
2
Linguagem de Programação
João
da Silva
3
Introdução aos Sistemas Operacionais
Laura
Nogueira
1
Fundamentos de Bando de Dados
Laura
Nogueira
2
Linguagem de Programação
Laura
Nogueira
3
Introdução aos Sistemas Operacionais
Elaine
Cristina
1
Fundamentos de Bando de Dados
Elaine
Cristina
2
Linguagem de Programação
Elaine
Cristina
3
Introdução aos Sistemas Operacionais

Operação de Junção (Join)

Veremos agora as duas últimas operações que interagem com o modelo relacional.

A operação de junção é utilizada para combinar tuplas de duas relações partindo dos atributos comuns a ambas.

O resultado conterá as colunas das duas relações que estão participando da junção.

Esta operação é de extrema importância em bancos de dados relacionais, pois é através dela que nos é permitido fazer relacionamento.

Simbologia: |x|
Sintaxe: (Relação 1) |x| <condição de junção> (Relação 2)

Uma condição de junção pode ser formada por mais de uma condição simples, apenas aplicando os operadores relacionais AND ou OR.

Vejamos um exemplo, considerando as seguintes tabelas:

ALUNOS
NOME
SOBRENOME
TURMA
Cecília
Ortiz Rezende
2TI
João
da Silva
1TI
Laura
Nogueira
2TI
Elaine
Cristina
2TI

TURMAS
COD_TURMA
DESCRICAO
1TI
1º Módulo - Informática
2TI
2º Módulo - Informática
1TA
1º Módulo - Administração
2TA
2º Módulo - Administração

ALU_TUR <----- ALUNOS |x| TURMA=COD_TURMA TURMAS

ALU_TUR
NOME
SOBRENOME
TURMA
COD_TURMA
DESCRICAO
Cecília
Ortiz Rezende
2TI
2TI
2º Módulo - Informática
João
da Silva
1TI
1TI
1º Módulo - Informática
Laura
Nogueira
2TI
2TI
2º Módulo - Informática
Elaine
Cristina
2TI
2TI
2º Módulo - Informática

E finalmente, podemos usar um conjunto de operações para trazer, por exemplo, apenas os alunos que cursam o 2º módulo de Informática:

RESULT <----- COD_TURMA>=2TI ( NOME, SOBRENOME, DESCRICAO (ALUNOS |x| TURMA=COD_TURMA TURMAS))

RESULT
NOME
SOBRENOME
DESCRICAO
Cecilia
Ortiz Rezende
2º Módulo - Informática
Laura
Nogueira
2º Módulo - Informática
Elaine
Cristina
2º Módulo - Informática


Operação de Divisão (Divide)

É uma operação adicional que produz como resultado a projeção de todos os elementos da primeira relação que se relacionam com todos os elementos da segunda relação.

Não é um operador primitivo, mas pode ter o resultado obtido por uma combinação de operadores primitivos.

Simbologia:
Sintaxe: (Relação 1) (Relação 2)

Vejamos no exemplo abaixo:

EQUIPE
ID_EMP
COD_PROJ
17206-2
001
12584-7
002
16764-6
001
17206-2
002
15698-3
003
17206-2
003

PROJETOS

COD_PROJ
DESCRICAO
001
Sistema IRPF
002
Sistema RH
003
Sistema Banco

FUNCIONARIO

ID_EMP
NOME
CARGO
17206-2
Jorge
Analista
12584-7
Paula
Programadora
16764-6
Frederico
DBA
15698-3
Heloisa
Web Master

Imagine a situação de querermos saber quais os funcionários que trabalham em todos os projetos:

RESULT <----- ( COD_PROJ (PROJETOS)) ( ID_EMP, COD_PROJ (EQUIPE))

RESULT

ID_EMP
17206-2


SÍMBOLO
OPERAÇÃO
SINTAXE
TIPO
<-----
Atribuição
Variável <----- Relação
Primitiva
Seleção (Select)
<condicao de elecao>(Relação)
Primitiva
Projeção (Project)
<lista de atributos>(Relação)
Primitiva
União (Union)
(Relação 1) (Relação 2)
Primitiva
Interseção (Intersection)
(Relação 1) (Relação 2)
Adicional
Diferença (Difference)
Sintaxe: (Relação 1) (Relação 2)
Primitiva
X
Produto Cartesiano (Product)
(Relação 1) X (Relação 2)
Primitiva
|x|
Junção (Join)

(Relação 1) |x| <condição de junção> (Relação 2)
Adicional
Divisão (Divide)
(Relação 1) (Relação 2)
Adicional

Conclusões

Finalizamos aqui a série de artigos sobre Álgebra Relacional. Tivemos uma boa noção de como é trabalhada a lógica de consultas através desta linguagem formal e podemos concluir que é uma ótima metodologia de desenvolvimento de raciocínio por parte de quem está aplicando a técnica.

Este desenvolvimento de raciocínio lógico em consultas a bancos de dados será muito útil na construção de instruções que irão interagir com o banco de dados, porém construindo essas instruções de maneira performática, tirando o máximo de desempenho possível.

Aguardo sua visita em nosso próximo artigo.
Até lá.

 

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