Você está na página 1de 56

Álgebra Relacional

Luciano F. de Medeiros
Conceito
• Linguagem de consultas procedural.
• Consiste em um conjunto de operações que
tem como entrada uma ou duas relações ou
• tabelas e produz, como resultado, uma nova
relação ou tabela.
• Tal propriedade é conhecida como a
propriedade de fechamento.
Operações
• Seleção
• Projeção
• Junção
• União
• Diferença
• Interseção
• Produto cartesiano
• Divisão
• Atribuição
Primitivos/Derivados
• Na proposta original de
Codd haviam oito
operadores (todos os
relacionados acima
exceto a “atribuição”)
que eram divididos em
primitivos ou
fundamentais (seleção,
projeção, produto
cartesiano, união,
interseção e diferença) e
derivados ou adicionais
(junção e divisão).
Quantidade de Relações
• Algumas operações, como a seleção e a
projeção, são denominadas de primárias ou
unitárias, por operarem com apenas uma
relação.
• Outras, como a junção e o produto cartesiano,
são consideradas binárias, por necessitarem
de duas relações.
Seleção
• A operação seleção seleciona linhas ou registros
que satisfaçam uma determinada condição.
• Dizemos que o operador de seleção faz uma
restrição em relação à linha ou ao registro –
restrição horizontal.
• Usamos a letra grega minúscula sigma (σ) para
denotar seleção
• A condição aparece subscrita a σ;
• O argumento da relação ou tabela é dado entre
parênteses, seguindo o σ.
Exemplo de Seleção
Exemplo de Seleção (2)
Condições Compostas
Projeção
• Permite que façamos uma restrição em termos
de atributos ou campos (ou mesmo colunas) de
uma relação ou tabela – aplica uma restrição
vertical.
• Os atributos de maior relevância são escolhidos
para que certa consulta seja feita ao banco de
dados.
• A projeção é denotada pela letra grega pi (π), a
qual aparece subscrita a lista de atributos ou
campos desejados para a operação.
Exemplo
Junção
• Também denominada de junção natural, tal operação
caracteriza-se por ser binária, necessitando de duas
relações ou tabelas.
• É também necessária a existência de atributos ou
campos em comum entre as duas tabelas envolvidas.
• Expressamos a operação através do símbolo
• Coloca-se em subscrito à direita a igualdade entre os
campos em comum.
• Caso os campos venham a ter a mesma designação
nas duas tabelas, omitimos a igualdade e colocamos
apenas uma vez o nome do atributo ou campo.
Exemplo
Campos em Comum
• Ao compararmos as duas, percebemos que os
campos que se correlacionam são ”codigo” na
tabela “CLIENTES”, e “codcli” na tabela
“PEDIDO”.
• Assim, é possível fazermos a junção das duas
tabelas através desses campos em comum.
Resultado
• Note que na igualdade, o campo “codcli” está à
esquerda, pois pertence à tabela “PEDIDO” e o
campo “codigo” está à direita, pois pertence,
por sua vez, à tabela “CLIENTES”.
Considerações
• Veja que a tabela de saída têm sete atributos
e que o atributo em comum não é repetido.
• Note também que na junção, os registros que
não têm um correspondente na outra tabela
desaparecem da tabela resultante (no caso, o
cliente de código 295, Carlos Silva).
• Agora, é possível sabermos pelo nome do
cliente o pedido relacionado a ele.
Propriedade Comutativa

• Veja que, agora, diferenciamos o atributo “codigo” da tabela


“CLIENTES” colocando o prefixo referente ao nome da
tabela, logo após um ponto e o nome do atributo, o mesmo
acontecendo com “PEDIDO”.
Operações Compostas
• Suponha que queiramos consultar apenas o
código do cliente que comprou o pedido 1010.
Assim, além de fazermos uma seleção, é
necessário também realizarmos uma projeção
para obtermos somente a informação do
campo “codcli”, por exemplo:
Resultado
• Como a seleção produz uma tabela de saída,
esta serve de entrada para a próxima
operação que é a projeção.
• A tabela de saída após a projeção fica:
Precedência das Operações
• Devemos ter cuidado quando fizermos a
operação de forma inversa:

• Nesse caso, como a tabela resultante da projeção


retorna apenas o atributo “codcli”, iremos perder o
campo “código” envolvido na seleção logo a seguir,
produzindo, desse modo, uma tabela nula:
Exemplo
• Uma boa regra para seguir é fazermos a operação de
junção seguida da seleção e apenas no final fazermos
a projeção.
• Assim, se quisermos obter apenas o nome do cliente
referente ao pedido 1010, precisaremos da junção
efetuada anteriormente, além de fazermos a
operação de seleção apenas para o pedido 1010,
para, depois, projetarmos para o atributo nome:
União
• A operação de união é binária e necessita de
duas tabelas para operar.
• A restrição colocada aqui é que as tabelas
envolvidas devem ter o mesmo conjunto de
atributos.
• Exemplo: No caso de duas tabelas relativas à
conta-corrente de clientes e às contas de
poupança, e quisermos obter uma consulta
recuperando todos os números de contas, não
importando de que tipos sejam, basta fazermos a
união das tabelas.
Exemplo
Resultado
Diferença
• A operação de diferença também é binária, de
forma semelhante à união e à junção.
• Se quisermos, numa consulta, retirar registros ou
linhas que sejam comuns às tabelas envolvidas, o
fazemos através da operação de diferença.
• Exemplo: Se quisermos, dentro do mesmo
contexto colocado para a união, excluir das
contas correntes aquelas que também são contas
de poupança, a expressão fica:
Resultado

• Para a operação diferença, vale a restrição


das tabelas envolvidas, com relação ao
conjunto de atributos iguais, aplicada à
operação de união.
Interseção
• A operação de interseção, como na teoria dos
conjuntos, tem a finalidade de retornar os
registros em comum entre duas tabelas.
• Essa operação é binária, necessitando de duas
tabelas para ser efetuada.
• Exemplo: Caso queiramos obter as contas que
aparecem tanto na relação “CONTA_CORRENTE”
quanto na “CONTA_POUPANÇA”, fazemos a
operação de interseção:
Resultado

• Dadas duas tabelas r e s quaisquer, a


operação de interseção pode ser escrita
utilizando somente a operação diferença:
Produto Cartesiano
• A operação produto cartesiano também é
binária, sendo bastante semelhante ao
produto cartesiano da teoria dos conjuntos.
• Enquanto a junção une duas tabelas de acordo
com campos em comum, no produto
cartesiano não são considerados tais campos.
• Para cada registro de uma tabela, repetem-se
todos os registros da outra.
PEDIDO x CLIENTES
PEDIDO x CLIENTES
Operações Compostas
• Nesse caso, podemos obter a consulta
composta sobre a operação do produto
cartesiano em vez da operação de junção,
pois, desde que na operação de seleção
façamos os campos comuns iguais entre si, é
possível operacionalizarmos:
Produto Cartesiano
• Devemos notar que a operação do produto
cartesiano é dispendiosa.
• O número de registros da tabela resultante de
uma operação de produto cartesiano é a
multiplicação do número de registros de cada
uma das tabelas.
• No nosso exemplo, existem quatro registros na
tabela “PEDIDO” e cinco registros na tabela
“CLIENTES”, resultando 20 registros na tabela de
saída da operação do produto cartesiano.
Renomeação
• Geralmente, o resultado de uma expressão
não possui um nome que possa ser usado
para referenciá-la. Em certos momentos é útil
dar um nome a uma tabela de saída. O
operador de renomeação é representado pela
letra grega rho (ρ).
Expressão
• Dada uma certa expressão da álgebra
relacional E, a expressão a seguir resulta a
expressão E com o nome r.

• Outra forma de utilizar a operação de


renomeação é a seguinte. Isso, desde que
tenhamos uma expressão E, a forma
seguinte:
Exemplo
• Vamos considerar o seguinte tipo de consulta:
“Qual o pedido de valor mais alto existente
em uma tabela?”
• Vamos considerar como ponto de partida a
tabela utilizada anteriormente para as outras
operações:
Exemplo (2)
• A estratégia a ser adotada, nessa situação,
consiste em primeiro estabelecermos uma
tabela temporária que irá conter os valores de
pedidos que não são altos.
• A partir deste conjunto, obtemos, a seguir, a
diferença entre a projeção da tabela original
“PEDIDO” e essa tabela temporária.
Exemplo (3)
• Para computar a tabela temporária, iremos
comparar os valores de todos os pedidos
existentes.
• Isso pode ser obtido a partir do produto
cartesiano “PEDIDO x PEDIDO”, e aplicar uma
seleção para comparar os valores de dois
pedidos quaisquer que venham a aparecer em
um registro.
Exemplo (4)
• Utilizamos, na seqüência, a operação
“renomeação” para mudar o nome da relação
“PEDIDO”, o que nos permite, dessa maneira,
a referência à segunda relação sem problemas
de duplicidade.
• A tabela temporária, que consiste dos pedidos
que não sejam os mais altos, pode ser
expressa da seguinte forma:
Expressão

• Assim, essa expressão irá fornecer os valores


da tabela “PEDIDO” para os quais um alto
valor aparece em qualquer parte da relação
“PEDIDO”, exceto o mais alto.
Análise
Seleção
Projeção
Projeção de PEDIDO
Expressão de Diferença
Atribuição (Designação)
• Uso de variável temporária
• A operação de atribuição ou designação,
denotada por ←, trabalha de maneira
assemelhada à atribuição de variáveis nas
linguagens de programação.
• Com essa operação, é possível fazer uma consulta
pode de maneira seqüencial, consistindo de uma
série de designações seguidas por uma expressão
cujo valor é exibido como o resultado daquela
consulta.
Atribuição (Designação)
Divisão
• A operação de divisão é similar à existente na
álgebra numérica. Dadas
• duas tabelas “P” e “Q”, a divisão de “P” por
“Q” é denotada por

• onde “P” é o “dividendo” e “Q” é o “divisor”.


Divisão
• A idéia por trás da operação de divisão é obter
o conjunto de registros em “P” que “casa” ou
coincide com todos em “Q”.
• Ou seja, devem aparecer, como resultado da
consulta, os registros de “P” que estão
relacionados a todos os registros em “Q”, ao
mesmo tempo.
Divisão
• Digamos que as tabelas “P” e “Q” assumam o
seguinte conteúdo:
Atributos
• A operação P ÷ Q resulta em:

• Ou seja, o resultado ou quociente da divisão


contém os atributos de “P” que não estão
presentes em “Q”.
Divisão
• Assim, o atributo “a” faz parte da tabela de
resultado e o valor “a1” aparece como
resultado na tabela quociente...
• Em função de “Q” ter os valores que
aparecem no atributo “b” e que se repetem
no atributo “a” (ou seja, os pares (a1, b1), (a1,
b2) e (a1, b3)) da tabela “P”.
Exemplo
• No caso da tabela “S” assumindo o seguinte
conteúdo temos:

por existirem os pares (a1, b1),


(a1, b2) e (a3, b1), (a3, b2) na
tabela “P”.
Exemplo (2)
• No caso da tabela “T” assumir o seguinte
conteúdo:

em razão da existência de
(a1, b1), (a2, b1) e (a3, b1)
na tabela “P”
“Qual o fornecedor que fornece todos
os produtos?”
Referências
• MEDEIROS, L. F. Banco de Dados – Princípios e
Prática. Curitiba: Ed. IBPEX, 2007.

Você também pode gostar