Escolar Documentos
Profissional Documentos
Cultura Documentos
numero-emprestimo
Downtown
Redwood
Perryridge
Downtown
Mianus
Round Hill
Pownal
North Tow
Downtown
Perryridge
Brighton
17
23
15
14
93
11
29
16
18
25
10
nome-cliente
valor
Jones
Smith
Hayes
Jackson
Curry
Turner
Williams
Adams
Johnson
Glenn
Brooks
1000
2000
1500
1500
500
900
1200
1300
2000
2500
2200
LGEBRA RELACIONAL
A lgebra relacional uma linguagem de consulta procedural. H cinco operaes
fundamentais na lgebra relacional. Estas operaes so: seleo, projeo, produto cartesiano,
unio e diferena entre conjuntos.Todas essas operaes produzem uma nova relao como seu
resultado.
Em adio s operaes fundamentais iremos apresentar diversas outras operaes:
interseco de conjuntos, juno theta, juno natural e diviso. Estas operaes sero definidas
em termos das operaes fundamentais.
Operaes Fundamentais
As operaes seleo e projeo so chamadas de operaes unrias, uma vez que
operam em uma relao. As outras trs relaes operam em pares de relaes e so, portanto,
chamadas de operaes binrias.
A operao seleo seleciona tuplas que satisfazem um dado predicado. Usamos a letra
grega sigma ( ) em minsculo para denotar seleo. O predicado aparece como um ndice de . A
relao argumento parnteses aps o . Assim, para selecionar aquelas tuplas da seleo
emprstimo onde a agncia Perryridge, escrevemos
nome-agencia= Perryridge
nome-agncia
nmero-emprestimo
nome-cliente
valor
15
25
Hayes
Glenn
1500
2500
Perryridge
Perryridge
Figura 3.4 Resultado de
(emprstimo)
nome-agncia = Perryridge
(emprstimo)
Se a relao emprstimo for como a mostrada na Figura 3.3, ento a relao resultante da
consulta ser a que aparece na Figura 3.4. Podemos encontrar todas as tuplas nas quais a
importncia emprestada maior que $1200 escrevendo
(emprstimo).
(emprstimo).
O predicado de seleo pode incluir comparaes entre dois atributos. Para ilustrar isto,
consideremos o esquema de relao
Fregus-esquema = (nome-cliente, nome-emmpregado)
indicando que o empregado o banqueiro pessoal do cliente. A relao fregus (Fregusesquema) mostrada na figura 3.5. Encontraremos todos os clientes que possuem o mesmo nome
que seu banqueiro pessoal, escrevendo
nome-cliente = nome-empregado
(fregus).
nome-empregado
Turner
Hayes
Johnson
Johnson
Jones
Johnson
seu banqueiro pessoal. A operao projeo nos permite produzir esta relao. A operao
projeo uma operao unria que copia sua relao argumento, deixando algumas colunas de
lado. A projeo denotada pela letra grega pi ( ) e relacionamos os atributos que desejamos que
apaream no resultado como subscrito de . A relao argumento aparece aps , entre
parnteses.
Suponha que quisssemos uma relao mostrando clientes e as agncias nas quais
obtiveram emprstimos, mas no nos interessa saber quanto foi emprestado, nem o nmero do
emprstimo. Poderamos escrever
nome-agncia, nome-cliente
(emprstimo).
Vamos rever a consulta Encontre aqueles clientes que possuem o mesmo nome que o seu
banqueiro pessoal. Escrevemos
nome-cliente
nome-cliente = nome-empregado
(fregus)).
Observe que em vez de darmos o nome de uma relao como o argumento da operao projeo,
demos uma expresso que resulta em uma relao.
As operaes discutidas at este ponto, nos permitem extrair informao de apenas uma
relao por vez. Ainda no fomos capazes de combinar informaes de diversas relaes. Uma
operao que nos permite fazer isto a operao produto cartesiano denotada por um xis (X).
Esta uma operao binria. Usaremos notao infixada para operaes binrias e, assim,
escreveremos o produto cartesiano das relaes r1 e r2 como r1Xr2. Vimos definio de produto
cartesiano no incio deste captulo (relembre que uma relao definida como um subconjunto do
produto cartesiano de um conjunto de domnios). A partir desta definio devemos ter alguma
intuio sobre a definio da operao X de lgebra relacional. Entretanto, h o problema de
escolhermos nomes de atributos para a relao que resulte de um produto cartesiano.
Suponha que queiramos encontrar todos os clientes do empregado Johnson bem como as
cidades onde esses clientes vivem. Necessitamos, para isso, de informao de ambas as relaes
fregus e cliente. A Figura 3.7 mostra a relao r = fregus X cliente. O esquema de relao para
r
nome-cliente
nome-empregado
Johnson
Johnson
Figura 3.6 Resultado de
nome-cliente = nome-empregado (fregus).(fregus.nome-cliente, fregus.nome-empregado,
cliente.nome-cliente, cliente.rua, cliente.cidade-cliente)
fregus.nome-empregado = Johnson
(fregus X cliente)
ento a relao resultado ser mostrada na Figura 3.8. Temos uma relao referente somente ao
empregado Johnson. Entretanto, a coluna fregus.nome-cliente pode conter clientes de outros
empregados que no Johnson (se voc no percebe bem por que, olhe novamente a definio de
produto cartesiano). Observe que a coluna fregus.nome-cliente, contm somente clientes de
Johnson. Uma vez que a operao de produto cartesiano associa cada tupla de cliente com cada
tupla de fregus, sabemos que alguma tupla em fregus X cliente tem o endereo do cliente do
empregado. Isto aparece naqueles casos onde acontece que o fregus.nome-cliente =
cliente.nome-cliente. Assim, se escrevermos
fregus.nome-cliente = cliente.nome-cliente (
fregus.nome-empregado = Johnson
(fregus X cliente).
fregus.
nome-cliente
fregus.
nome-empregado
cliente.
nome-cliente
cliente.
rua
cliente.
cidade-cliente
Turner
Turner
Turner
Turner
Turner
Turner
Turner
Turner
Turner
Turner
Turner
Turner
Hayes
Hayes
Hayes
Hayes
Hayes
Hayes
Hayes
Hayes
Hayes
Hayes
Hayes
Hayes
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Jones
Jones
Jones
Jones
Jones
Jones
Jones
Jones
Jones
Jones
Jones
Jones
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Jones
Smith
Hayes
Curry
Lindsay
Turner
Williams
Adams
Johnson
Glenn
Brooks
Green
Jones
Smith
Hayes
Curry
Lindsay
Turner
Williams
Adams
Johnson
Glenn
Brooks
Green
Jones
Smith
Hayes
Curry
Lindsay
Turner
Williams
Adams
Johnson
Glenn
Brooks
Green
Main
North
Main
North
Park
Putnam
Nassau
Spring
Alma
Sand Hill
Senator
Walnut
Main
North
Main
North
Park
Putnam
Nassau
Spring
Alma
Sand Hill
Senator
Walnut
Main
North
Main
North
Park
Putnam
Nassau
Spring
Alma
Sand Hill
Senator
Walnut
Harrison
Rye
Harrison
Rye
Pittsfield
Stamford
Princeton
Pittsfield
Palo Alto
Woodside
Brooklyn
Stamford
Harrison
Rye
Harrison
Rye
Pittsfield
Stamford
Princeton
Pittsfield
Palo Alto
Woodside
Brooklyn
Stamford
Harrison
Rye
Harrison
Rye
Pittsfield
Stamford
Princeton
Pittsfield
Palo Alto
Woodside
Brooklyn
Stamford
fregus.nome-cliente, cidade.cidade-cliente
fregus.nome-cliente = cliente.nome-cliente
fregus.nome-empregado =
(fregus X cliente))).
O resultado desta expresso a resposta correta consulta.
Johnson
fregus.
nome-cliente
fregus.
nome-empregado
cliente.
nome-cliente
cliente.
rua
cliente.
cidade-cliente
Turner
Turner
Turner
Turner
Turner
Turner
Turner
Turner
Turner
Turner
Turner
Turner
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Johnson
Jones
Smith
Hayes
Curry
Lindsay
Turner
Williams
Adams
Johnson
Glenn
Brooks
Green
Jones
Smith
Hayes
Curry
Lindsay
Turner
Williams
Adams
Johnson
Glenn
Brooks
Green
Main
North
Main
North
Park
Putnam
Nassau
Spring
Alma
Sand Hill
Senator
Walnut
Main
North
Main
North
Park
Putnam
Nassau
Spring
Alma
Sand Hill
Senator
Walnut
Harrison
Rye
Harrison
Rye
Pittsfield
Stamford
Princeton
Pittsfield
Palo Alto
Woodside
Brooklyn
Stamford
Harrison
Rye
Harrison
Rye
Pittsfield
Stamford
Princeton
Pittsfield
Palo Alto
Woodside
Brooklyn
Stamford
Consideremos uma consulta que possa ser pedida pelo departamento de propaganda do
banco: Encontre todos os clientes da agncia de Perryridge. Isto , encontre todas as pessoas
que tm um emprstimo, uma conta o ambos. Para responder esta consulta, precisamos
informao da relao emprstimo (Figura 3.3) e da relao depsito (Figura 3.1). Sabemos como
encontrar todos os clientes com emprstimos na agncia de Perryridge:
nome-cliente
Sabemos tambm como encontrar todos os clientes com uma conta na agncia de Perryridge:
nome-cliente
Para responder a consulta, necessitamos da unio desses dois conjuntos, isto , todos os clientes
que aparecem em uma ou nas duas relaes. Isto realizado pela operao binria de unio,
denotada como na teoria de conjuntos, por U. Assim a expresso que o departamento de
propaganda necessita em nosso exemplo
nome-cliente
nome-agncia = Perryridge
(emprstimo)) U
nome-cliente
nome-agncia = Perryridge
(depsito)).
A relao resultante desta consulta aparece na Figura 3.9. Observe que h trs tuplas no
resultado, muito embora a agncia de Perryridge tenha dois emprstimos e dois depositantes. Isto
se deve ao fato de Hayes ter efetuado tanto um emprstimo como um depsito na agncia de
Perryridge. Uma vez que relaes so conjuntos, valores duplicados so eliminados.
Observe que, no exemplo, tomamos a unio de dois conjuntos, ambos constitudos por
valores nome-cliente. Em geral precisamos assegurar que as unies sejam feitas entre relaes
compatveis. Por exemplo, no faria sentido tomarmos a unio da relao emprstimo e da
relao cliente. A primeira uma relao de quatro atributos e a segunda trs. Alm disso,
considere uma unio de um conjunto de nomes de clientes e um conjunto de cidades. Tal unio
no faz sentido na maioria das situaes. Portanto, para uma operao de unio r U s ser legal,
necessrio que duas condies sejam asseguradas:
1. As relaes r e s precisam ser da mesma ordem. Isto , precisam possuir o mesmo numero de
atributos.
nome-cliente
Hayes
Glenn
Williams
Figura 3.9 Nome de todos os clientes da agncia de Perryridge.
nome-cliente
nome-agncia = Perryridge
(depsito)) -
nome-cliente
nome-agncia = Perryridge
(emprstimo)).
O resultado desta consulta aparece na Figura 3.10.
Definio Formal da lgebra Relacional
Os cinco operadores que acabamos de ver, nos permite dar uma definio completa de
uma expresso em lgebra relacional.Uma expresso bsica em lgebra relacional consiste numa
das seguintes:
Uma relao no banco de dados;
Uma relao constante.
Uma expresso geral na lgebra relacional construda de subexpresses menores.Sejam E1
e E2 expresses da lgebra relacional. Assim,
6
E1 U E2;
E1 - E2 ;
E1 x E2;
p (E1), onde P um predicado de atributos em E1;
nome-cliente
Williams
Figura 3.10 Clientes com somente uma conta na agncia Perryridge.
Operadores Adicionais
Vimos at agora os cinco operadores da lgebra relacional: , , X, U, -. Estes cinco
operadores so suficientes para expressar qualquer consulta em lgebra relacional. Enquanto, se
ficarmos restritos somente aos cinco operadores fundamentais, algumas consultas comuns sero
muito longas para serem expressas. Sendo assim, definimos novos operadores adicionais que no
acrescentam qualquer poder lgebra, mas simplificam consultas comuns.
Para cada novo operador que definirmos, daremos uma expresso equivalente usando
somente os cinco operadores fundamentais.
A primeira operao adicional de lgebra relacional que iremos definir ser interseco de
conjuntos ( ). Suponha que desejamos encontrar todos os clientes que possuam tanto um
emprstimo como uma conta na agncia de Perryridge. Usando interseces de conjuntos,
podemos escrever:
nome-cliente
nome-cliente
nome-agncia = Perryridge
(depsito)).
s = r (r s).
( pemprstimo X cliente)
emprstimo.nome-cliente, cliente.cidade-cliente
onde:
p = emprstimo.nome-agncia = Perryridge ^ emprstimo.nome-cliente = cliente.nome-cliente
nome-cliente
Hayes
Figura 3.11 Clientes com uma conta e um emprstimo na agncia Perryridge
A juno theta uma operao binria que nos permite combinar a seleo e o produto
cartesiano em uma s operao. A juno theta denotada por [X] , onde [X] o smbolo juno
e o subscript (letra grega theta) substitudo pelo predicado de seleo. O operador juno
theta forma o produto cartesiano de seus dois argumentos e ento executa uma seleo usando o
predicado .
emprstimo.nome-cliente, cliente.cidade-cliente
Neste exemplo,
o predicado:
emprstimo.nome-agncia = Perryridge
^ emprstimo.nome-cliente = cliente.nome-cliente
Normalmente,
(r s)
emprstimo.nome-cliente, cliente.cidade-cliente
Observe que esta particular juno theta fora a igualdade naqueles atributos que aparecem em
ambos os esquemas de seleo. Esta espcie de predicado ocorre com freqncia na prtica. De
fato, se estamos imprimindo pares de (nome-cliente, cidade-cliente), normalmente gostaramos
que cidade fosse a cidade onde vive o cliente e no alguma cidade arbitrria. A operao juno
natural feita precisamente para esta espcie de consulta.
Embora a definio de juno natural no seja muito clara, pode ser usada com facilidade.
Podemos usar a juno natural para escrever a consulta Encontre todos os clientes que possuam
um emprstimo em alguma agncia e suas cidades, da seguinte forma:
nome-cliente, cidade-cliente(emprstimo
[X] cliente).
nome-cliente, cidade-cliente(
[X] cliente)).
Agora estamos pronto para uma definio da juno natural. Considere dois esquemas de
relao R e S que so listas de nomes de atributos. Vamos considerar os esquemas como
conjuntos em vez de listas. Isto nos permite denotar aqueles atributos tanto em R como em S por
R S, e a denotar aqueles atributos que aparecem em R, em S, ou em ambos por R U S. Note que
estamos falando, aqui, sobre unio e interseco de conjuntos de atributos, no sobre relaes.
nome-cliente
cidade-cliente
Jones
Smith
Hayes
Curry
Lindsay
Turner
Williams
Adams
Johnson
Glenn
Brooks
Harrison
Rye
Harrison
Rye
Pittsfield
Stamford
Princeton
Pittsfield
Palo Alto
Woodside
Brooklyn
nome-cliente, cidade-cliente
Considere duas relaes r (R) e s (S). A juno natural de r e s, denotada por r[X] s uma
relao no esquema R U S. Ela a projeo em R U S de uma juno theta onde o predicado
requer r . A = s . A para cada atributo A em R S. Formalmente,
r [X] s =
onde: R
s)
Agora que apresentamos a juno natural, adotaremos a seguinte conveno para nomes
de atributos em produtos cartesianos de relaes: usaremos a notao nome-relao.nomeatributo somente quando necessrio para evitar ambigidade. Quando no houver ambigidade,
ns teremos de omitir o prefixo nome-relao.
Como a juno natural fundamental para a teoria e prtica de bancos de dados
relacionais, temos, a seguir, diversos exemplos de seu uso:
Encontre os depsitos e o nome de todas as agncias nas quais existem depositantes (isto ,
clientes com uma conta) vivendo em Port Chester.
Observe que escrevemos cliente [X] depsito [X] agncia sem inserir parnteses para especificar
(cliente [X] depsito) [X] agncia
ou
cliente [X] (depsito [X] agncia)
No especificamos qual expresso pretendamos porque elas so equivalentes. Isto , a juno
natural associativa.
Encontre todos os clientes que possuam tanto uma conta como um emprstimo na agncia
Perryridge.
nome-cliente
[x] depsito))
Observe que poderamos ter escrito uma expresso para esta consulta usando interseco de
conjuntos:
nome-cliente (
nome-cliente
Este exemplo ilustra um fato geral sobre lgebra relacional: possvel escrever diversas
expresses equivalentes de lgebra relacional que so bastante diferentes umas das outras.
S = (
Apresentaremos agora, uma ltima operao de lgebra relacional, chamada diviso ().
A operao diviso especialmente apropriada em consultas que incluam a frase para todos.
Suponha que precisemos encontrar todos os clientes que possuam uma conta em todas as
agncias localizadas em Brooklyn. Obteremos todas as agncias em Brooklyn pela expresso:
r1 =
nome-agncia (
Podemos encontrar todos os pares de nome-cliente.nome-agncia para os quais o cliente tem uma
conta na agncia escrevendo:
r2 =
nome-cliente,nome-agncia
(depsito)
Agora, precisamos encontrar clientes que aparecem em r2 com todo nome de agncia em r1. A
operao que nos possibilita encontrar esses clientes a operao diviso. A consulta pode ser
respondida escrevendo-se
nome-cliente,nome-agncia
(depsito)
nome-agncia (
10
tr [S] = t s [S]
tr [R S] = t [R S]
Pode ser surpreendente descobrir que a operao diviso pode, de fato, ser definida em termos
das cinco operaes fundamentais. Sejam r(R) e s(S) dados, com S C R .
rs=
RS
(r) -
RS
((
R S
(r) s) r)
Para provar que isto verdade, observe que R S (r) nos d as tuplas t que satisfazem a segunda
condio da definio de diviso. A expresso no lado direito do operador diferena,
RS
((
RS
(r) s) r)
serve para eliminar aquelas tuplas que falham em satisfazer a primeira condio da definio de
diviso. Isto acontece da seguinte forma: considere R S (r) X s. Esta uma relao do esquema
R que combina cada tupla em R S (r) com cada tupla s. Assim R S ((r) X s) r nos d aqueles
pares de tuplas de R S (r) e s que no aparecem em r. Se uma tupla t est em
RS
((
RS
(r) s) r)
ento h alguma tupla ts em s que no combina com uma tupla t para formar uma tupla em r.
Assim t possui um valor para os atributos R S que no aparecem em r s. So estes valores que
eliminamos de R S (r).
11