Você está na página 1de 11

nome-agncia

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

Figura 3.3 A relao emprstimo.

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

valor > 1200

(emprstimo).

Em geral, permitimos comparaes usando =, , <, , >, no predicado de seleo. Alm


disso, vrios predicados podem ser combinados em um predicado maior usando os conceitos e (^)
e ou (v). Assim, para encontrar aquelas tuplas pertencentes a emprstimo de mais de $1200,
efetuados pela agncia de Perryridge, escrevemos

nome-agncia = Perryridge ^ valor > 1200

(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).

Se a relao fregus dada na Figura 3.5 resposta a relao da Figura 3.6.


No exemplo mostrado, obtivemos uma relao (Figura 3.6) em (nome-cliente, nomeempregado) na qual t[nome-cliente] = t[nome-empregado] para todas as tuplas t. Parece
redundante listar os nomes das pessoas duas vezes. Preferiramos uma relao de um atributo em
(nome-cliente) que listasse todos aqueles que possuem o mesmo nome de
nome-cliente

nome-empregado

Turner
Hayes
Johnson

Johnson
Jones
Johnson

Figura 3.5 A relao fregus.

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)

Isto , simplesmente listamos todos os atributos de ambas as relaes e adicionamos o


nome da relao da qual originalmente o atributo vem. preciso colocar o nome da relao para
distinguir fregus.nome-cliente de cliente.nome-cliente.
Agora que conhecemos o esquema de relao para r = fregus X cliente, que tuplas
aparecem em r? Como voc deve ter suspeitado, construmos uma tupla de r para cada possvel
par de tuplas: uma da relao fregus e uma da relao cliente. Assim r uma grande relao,
como pode ser visto na Figura 3.7.
Assuma que tenhamos n 1 tuplas em fregus e n2 em clientes. Ento, temos n1n2 maneiras
de escolher um par de tuplas: uma tupla de cada relao, de modo que h n1n2 tuplas em r.
Particularmente, note que pode acontecer para algumas tuplas t em r que t[fregus.nome-cliente]
t[cliente.nome-cliente].
Em geral, se temos relaes r1(R1) e r2(R2), r1 e r2 uma relao cujo esquema a
concatenao de R1 e R2. A relao R contm todas as tuplas t para as quais h uma tupla t1 em r1
e t2 em r2 para que t[R1] = t1[R1] e t[R2] = t2[R2].
Retornando para a consulta Encontre todos os fregueses de Johnson e as cidades nas
quais eles vivem, consideramos a relao r =fregus X cliente. Se escrevermos

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

Figura 3.7 Resultado de fregus X cliente.

Obteremos somente aquelas tuplas de fregus X cliente que:


sejam relativas a Johnson;
possuam a rua e a cidade do cliente de Johnson.
Finalmente, uma vez que queremos somente nome-cliente e cidade-cliente, fazemos uma
projeo

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

Figura 3.8 Resultado de

fregus.nome-empregado = Johnson (fregus X cliente).

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

nome-agncia = Perryridge (emprstimo)).

Sabemos tambm como encontrar todos os clientes com uma conta na agncia de Perryridge:

nome-cliente

nome-agncia = Perryridge (depsito)).

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.

2. Os domnios i-simo atributo de r e do i-simo atributo de s devem ser os mesmos.


O operador diferena entre conjuntos, denotado por (-), nos permite encontrar tuplas que
esto em uma relao, mas, no em outra. A expresso r s resulta em uma relao contendo
aquelas tuplas em r mas no em s.
Podemos encontrar todos os clientes da agncia Perryridge que possuam uma conta mas
que no tenham emprstimo, escrevendo:

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;

s (E 1), onde S uma lista de alguns atributos que aparecem em E1


so todas expresses de lgebra relacional.

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-agncia = Perryridge (emprstimo))

nome-cliente

nome-agncia = Perryridge

(depsito)).

A relao resultante nesta consulta aparece na Figura 3.11.


Observe, entretanto, que no inclumos a interseco de conjuntos como uma operao
fundamental, porque podemos reescrever qualquer expresso de lgebra relacional que use
interseco de conjuntos substituindo a operao de interseco por um par de operadores de
diferena, como segue:
r

s = r (r s).

Assim, a interseco de conjuntos no adiciona poder algum lgebra relacional. simplesmente


mais conveniente escrever r s que r (r s).

As prximas operaes que acrescentaremos lgebra so usadas para simplificar muitas


consultas que querem um produto cartesiano. Tipicamente, uma consulta que envolve um produto
cartesiano inclui uma operao de seleo no resultado do produto. Considere que a consulta
Encontre todos os clientes da agncia de Perryridge e as cidades onde eles vivem.
Primeiramente, formamos o produto cartesiano das relaes emprstimo e cliente, ento
selecionamos as tuplas relativas a Perryridge e relativas somente a um nome-cliente. Assim
escrevemos

( 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 .

Reescrevemos a expresso de lgebra relacional para Encontrar todos os clientes que


possuem um emprstimo na agncia de Perryridge e as cidades onde eles vivem, usando a
juno theta conforme se segue:

( pemprstimo [X] cliente)

emprstimo.nome-cliente, cliente.cidade-cliente

Neste exemplo,

o predicado:
emprstimo.nome-agncia = Perryridge

^ emprstimo.nome-cliente = cliente.nome-cliente

Normalmente,

pode ser um predicado arbitrrio. Dadas duas relaes, r e s, e um predicado ,


r [X] s =

(r s)

A operao juno natural uma simplificao ainda maior de notao da lgebra


relacional. Vamos considerar uma verso simplificada do exemplo acima. Encontre todos os
clientes que possuem um emprstimo em alguma agncia e suas cidades. Se escrevermos esta
consulta como uma juno theta teremos

emprstimo.nome-cliente, cliente.cidade-cliente

(emprstimo [X] emprstimo.nome-cliente = cliente.nome-cliente 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).

Uma vez que os esquemas para emprstimo e cliente (isto , Emprstimo-esquema e


cliente-esquema) possuem o atributo nome-cliente em comum, a operao juno natural
considera somente pares de tuplas que possuem o mesmo valor em nome-cliente e combina cada
um destes pares de tuplas em uma tupla nica na unio dos dois esquemas (isto , nome-agncia,
nmero-emprstimo, nome-cliente, valor, rua, cidade-cliente). Aps executar a projeo,
obtemos a relao mostrada na Figura 3.12. O exemplo anterior, Encontre todos os clientes que
possuam um emprstimo na agncia Perryridge e suas cidades, pode ser escrito como

nome-cliente, cidade-cliente(

nome-agncia = Perryridge (emprstimo

[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

Figura 3.12 Resultado de

nome-cliente, cidade-cliente

(emprstimo [X] 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

R U S (r [X] r.A1 = s.A1^..., ^ r.An = s.An

s)

S = {A1, ..., An}.

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.

nome-agncia, ativo ( cidade-cliente = Port Chester (cliente

[X] depsito [X] agncia))

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

nome-agncia = Perryridge (emprstimo

[x] depsito))

Observe que poderamos ter escrito uma expresso para esta consulta usando interseco de
conjuntos:

nome-cliente (

nome-agncia = Perryridge ( depsito))

nome-cliente

nome-agncia = Perryridge (emprstimo)).

Este exemplo ilustra um fato geral sobre lgebra relacional: possvel escrever diversas
expresses equivalentes de lgebra relacional que so bastante diferentes umas das outras.

Sejam r (R) e s (S) relaes sem quaisquer atributos em comum, isto , R


denota o conjunto vazio). Ento r [X] s = r s.

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 (

cidade-agncia = Brooklyn (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 (

cidade-agncia = Brooklyn (agncia))

obs: r2 / r1 (r2 dividido por r1)


Formalmente, sejam r(R) e s(S) relaes, e seja S C R . A relao r s uma relao no esquema
R S. A tupla t est em r s se para cada tupla ts em s h uma tupla tr em r satisfazendo as
seguintes condies:

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

Você também pode gostar