Álgebra Relacional –Linguagem de consulta formal


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.

23-08pic01.JPG 

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: 23-08pic06.JPG
Sintaxe: 23-08pic06.JPG (Relação)
Exemplo: 23-08pic06.JPG sal>=2500 (EMPREGADO)
A seleção acima nos apresentará como resultado as informações abaixo:

23-08pic04.JPG 

 

 

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: 23-08pic02.JPG
Sintaxe: 23-08pic02.JPG (Relação)
Exemplo: 23-08pic02.JPG 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.

23-08pic02.JPG NOME, SOBRENOME, SAL (23-08pic06.JPG 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 <---- 23-08pic06.JPG DEPTO=3 (EMPREGADO)
E logo após:
RESULT <----- 23-08pic02.JPGNOME, 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) <----- 23-08pic02.JPGNOME, SOBRENOME, SAL (23-08pic06.JPG DEPTO=3 (EMPREGADO))

Result:

NOME

SOBRENOME

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 <---- 23-08pic06.JPG DEPTO=3 (EMPREGADO)
DEPTO3

23-08pic05.JPG

RESULT1 <---- 23-08pic02.JPG  ID_EMP (DEPTO3)
RESULT1

ID_EMP

12584-7

17987-5

16257-2

15234-1

RESULT2 <---- 23-08pic02.JPG 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: 23-08pic03.JPG
Sintaxe: (Relação 1)23-08pic03.JPG(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) 23-08pic03.JPG(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 A23-08pic03.JPGB = B23-08pic03.JPGA;
    Aplicadas a qualquer número de relações;
     
  • Associativas, ou seja, AU(BUC) = (AUB)UC e A23-08pic03.JPG(B23-08pic03.JPGC) = (A23-08pic03.JPGB)23-08pic03.JPGC


 

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)


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 <----- 15 COD_TURMA>=2TI (12 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: 5
Sintaxe: (Relação 1) 4 (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 <----- (11 COD_PROJ (PROJETOS)) 3 (10 ID_EMP, COD_PROJ (EQUIPE))

RESULT

ID_EMP
17206-2


SÍMBOLO
OPERAÇÃO
SINTAXE
TIPO
<-----
Atribuição
Variável <----- Relação
Primitiva
14
Seleção (Select)
13 <condicao de elecao>(Relação)
Primitiva
9
Projeção (Project)
8 <lista de atributos>(Relação)
Primitiva
17
União (Union)
(Relação 1) 16 (Relação 2)
Primitiva
7
Interseção (Intersection)
(Relação 1) 6 (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
2
Divisão (Divide)
(Relação 1) 1 (Relação 2)
Adicional