Académique Documents
Professionnel Documents
Culture Documents
Bases de Dados
Parte IV
lgebra e Clculo Relacional
lgebra Relacional
Conjunto bsico de operaes que nos permitem manipular relaes no modelo
relacional.
As operaes da lgebra relacional produzem novas relaes, ou seja, a aplicao
de uma operao da lgebra relacional tem sempre como resultado uma nova
relao.
As relaes obtidas por utilizao das operaes da lgebra relacional podem ser
igualmente utilizadas em outras operaes da lgebra.
Uma sequncia de operaes da lgebra relacional forma uma expresso cujo
resultado uma relao que representa o resultado de uma consulta base de
dados.
A lgebra relacional utilizada principalmente como formalismo para implementar
e optimizar consultas no modelo relacional.
A linguagem SQL incorpora alguns dos conceitos da lgebra relacional.
U
I
Operao de Seleco
Permite seleccionar um subconjunto de tuplos de uma relao a partir de uma
condio sobre os atributos.
A operao de seleco representada pela expresso
COND(R)
em que o operador de seleco e COND a condio sobre os atributos da
relao R.
A condio COND pode ser da forma
Ai Aj ou Ai VAL
em que Ai e Aj so atributos, um operador de comparao {=, <, >, , , } e
VAL dom(Ai).
A condio COND tambm pode ser composta por vrias clusulas ligadas pelos
operadores lgicos AND, OR ou NOT.
Operao de Seleco
EMPREGADO NomeP NomeF
NumBI
...
Salrio NumDep
Joo
Santos 798764544
...
2500
Ins
Pereira 345673451
...
2000
Rui
Silva
487563546
...
1500
Ana
Feio
342342324
...
3000
NumBI
Santos 798764544
Feio
342342324
...
Salrio NumDep
...
2500
...
3000
Operao de Seleco
A relao resultante da operao de seleco
COND(R)
tem os mesmos atributos da relao R.
um operador comutativo:
COND1(COND2(R)) = COND2(COND1(R))
Uma sequncia de operaes de seleco pode ser substituda por uma nica
operao de seleco com a conjuno de todas as condies:
Operao de Projeco
Permite obter uma nova relao com apenas alguns atributos da relao original.
A operao de projeco representada pela expresso
ATRIBS(R)
em que o operador de projeco e ATRIBS a lista de atributos a seleccionar
da relao R.
A relao resultante da operao de projeco tem apenas os atributos definidos
em ATRIBS na mesma ordem em que estes aparecem indicados na lista.
Operao de Projeco
EMPREGADO NomeP NomeF
NumBI
...
Salrio NumDep
Joo
Santos 798764544
...
2500
Ins
Pereira 345673451
...
2000
Rui
Silva
487563546
...
1500
Ana
Feio
342342324
...
3000
NomeP NomeF
798764544
Santos
345673451
Ins
Pereira
487563546
Rui
Silva
342342324
Joo
Ana
Feio
Operao de Projeco
Para que o resultado seja uma relao vlida, a operao de projeco remove
tuplos repetidos (pode ser necessrio quando a lista no inclui a chave de R).
Uma sequncia de operaes de projeco pode ser substituda por uma nica
operao de projeco:
ATRIBS1(ATRIBS2(R)) = ATRIBS1(R)
se ATRIBS1
Operao de Projeco
EMPREGADO NomeP NomeF
NumBI
...
Salrio NumDep
Joo
Santos 798764544
...
2500
Ins
Pereira 345673451
...
2000
Rui
Silva
487563546
...
1500
Ana
Feio
342342324
...
3000
NumDep(EMPREGADO)
NumDep
4
1
2
10
Resultados Intermdios
EMPREGADO NomeP NomeF
NumBI
...
Salrio NumDep
Joo
Santos 798764544
...
2500
Ins
Pereira 345673451
...
2000
Rui
Silva
487563546
...
1500
Ana
Feio
342342324
...
3000
Obtenha o nmero do BI, primeiro e ltimo nome dos empregados que trabalham
no departamento 4 e cujo salrio superior a 2000 euros.
NomeP NomeF
798764544
Joo
Santos
342342324
Ana
Feio
11
Resultados Intermdios
A consulta anterior pode ser escrita criando resultados intermdios sobre os quais
vamos aplicando as operaes restantes.
DEP4_SAL2000 NumDep = 4 AND Salrio > 2000(EMPREGADO)
RESULT NumBI, NomeP, NomeF(DEP4_SAL2000)
DEP4_SAL2000 NomeP NomeF
Joo
Ana
RESULT
NumBI
Santos 798764544
Feio
342342324
NumBI
...
...
2500
...
3000
NomeP NomeF
798764544
Joo
Santos
342342324
Salrio NumDep
Ana
Feio
12
Operao de Renomeao
Permite obter uma nova relao com o nome da relao e/ou o nome dos atributos
renomeados.
A operao de renomeao representada pelas expresses
S(R)
BI
Nome
Apelido
798764544
Joo
Santos
342342324
Ana
Feio
13
14
Operao de Reunio
EMPREGADO NomeP NomeF
...
Salrio
SuperBI
NumDep
Joo
Santos 798764544
NumBI
...
2500
487563546
Ins
Pereira 345673451
...
2000
487563546
Rui
Silva
487563546
...
1500
123456789
Ana
Feio
342342324
...
3000
798764544
RESULT
NumBI
798764544
342342324
487563546
16
Operao de Interseco
EMPREGADO NomeP NomeF
...
Salrio
SuperBI
NumDep
Joo
Santos 798764544
NumBI
...
2500
487563546
Ins
Pereira 345673451
...
2000
487563546
Rui
Silva
487563546
...
1500
123456789
Ana
Feio
342342324
...
3000
798764544
RESULT
NumBI
798764544
17
Operao de Diferena
EMPREGADO NomeP NomeF
...
Salrio
SuperBI
NumDep
Joo
Santos 798764544
NumBI
...
2500
487563546
Ins
Pereira 345673451
...
2000
487563546
Rui
Silva
487563546
...
1500
123456789
Ana
Feio
342342324
...
3000
798764544
RESULT
NumBI
342342324
18
Produto Cartesiano
Permite combinar numa nova relao todos os tuplos de duas relaes.
O produto cartesiano representado pela expresso
RS
em que o operador de produto cartesiano e R e S so duas relaes quaisquer.
O produto cartesiano entre R(A1, A2, , An) e S(B1, B2, , Bm) tem como
resultado a relao T(A1, A2, , An, B1, B2, , Bm) onde existe um tuplo para
cada combinao possvel de tuplos de R com tuplos de S.
Se R tiver NR tuplos e S tiver NS tuplos, ento R S tem NR * NS tuplos.
19
Produto Cartesiano
R
A1
A2
B1
B2
B3
a1_val1 a2_val1
a1_val2 a2_val2
a1_val3 a2_val3
RS
A1
A2
B1
B2
B3
20
10
Produto Cartesiano
Obtenha o nome dos dependentes dos empregados do sexo feminino.
EMP_FEM Sexo = F(EMPREGADO)
FEM_DEPS NumBI = EmpBI(EMP_FEM DEPENDENTES)
RESULT Nome(FEM_DEPS)
Alternativa de resoluo mais eficiente:
EMP_FEM NumBI(Sexo = F(EMPREGADO))
DEPS_NOME EmpBI, Nome(DEPENDENTES)
FEM_DEPS NumBI = EmpBI(EMP_FEM DEPS_NOME)
RESULT Nome(FEM_DEPS)
21
Operao de Juno
Permite combinar tuplos de duas relaes que obedecem a uma condio de
juno.
A operao de juno (ou juno-) representada pela expresso
R COND S
22
11
Operao de Juno
A operao de juno entre R(A1, A2, , An) e S(B1, B2, , Bm) tem como
resultado a relao T(A1, A2, , An, B1, B2, , Bm) onde existe um tuplo para
cada combinao possvel de tuplos de R com tuplos de S que satisfaz a condio
de juno.
A operao de juno equivale s operaes de produto cartesiano e de seleco:
R COND S = COND(R S)
A operao de juno muito utilizada em BD pois permite lidar com os
relacionamentos entre relaes.
23
Operao de Juno
Obtenha o nome dos dependentes dos empregados do sexo feminino.
EMP_FEM Sexo = F(EMPREGADO)
PNome,
NomeF(PORTO_DEP
GerenteBI
NumBI
24
12
Operao de Equi-Juno
EquiOperao de juno em que se utiliza apenas o operador de comparao = na
condio de juno.
A relao resultante de uma operao de equi-juno tem pelo menos um par de
atributos em duplicado (com os mesmos valores em todos os tuplos).
Os atributos em duplicado so os atributos envolvidos na condio de juno. Por
exemplo, na relao DEP_GER, GerenteBI e NumBI tm os mesmos valores em
todos os tuplos:
DEP_GER DEPARTAMENTO GerenteBI = NumBI EMPREGADO
DEP_GER
Nome
NumBI
...
Vendas
798764544
01-01-2000
Joo
Santos 798764544
...
Produo
345673451
15-10-2003
Ins
Pereira 345673451
...
Ps-Venda
487563546
01-06-1995
Rui
Silva
487563546
...
25
Num
NumBI
Vendas
798764544
01-01-2000
Joo
Santos
...
Produo
345673451
15-10-2003
Ins
Pereira
...
Ps-Venda
487563546
01-06-1995
Rui
Silva
...
...
26
13
27
COND S)
COND S)
COND S)
28
14
NumBI
...
EmpBI
Nome
DataNasc
GrauParentesco
Joo
Esposa
Ins
NULL
NULL
NULL
NULL
Rui
Silva
Rui
Silva
487563546
Ana
Feio
RESULT
Esposa
Filho
Marido
NumBI
345673451
29
Operao de Diviso
Permite obter os valores de uma relao que esto combinados com todos os tuplos
de outra relao.
A operao de diviso representada pela expresso
RS
em que o operador de diviso e R e S so duas relaes em que os atributos de
S so um subconjunto dos atributos de R.
O resultado da operao R(Z) S(X) a relao T(Y), com Y = Z X, que inclui
todos os tuplos t para os quais existe um subconjunto R de R tal que Y(R) = t e
X(R) = S.
A operao de diviso pode ser expressa utilizando os operadores , e :
R(Z) S(X)
30
15
Operao de Diviso
R
a1
b1
a1
a2
b1
a2
a3
b1
a3
a4
b1
a1
b2
a3
b2
a2
b3
a3
b3
a4
b3
a1
b4
a2
b4
b1
a3
b4
b4
RS
31
Operao de Diviso
Obtenha o nome dos empregados que trabalham em TODOS os projectos nos quais
o Rui Silva tambm trabalha.
EMP_SILVA NomeP = Rui AND NomeF = Silva(EMPREGADO)
SILVA_PROJ
EMP_SILVA)
NumProj(TRABALHA_EM
EmpBI
NumBI
32
16
Operao de Agregao
Permite agrupar tuplos e sumariar informao a partir de funes de agregao.
A operao de agregao representada pela expresso
ATRIBS FUNS(R)
em que o operador de agregao, ATRIBS a lista de atributos de R a agrupar
e FUNS a lista das funes de agregao.
A lista FUNS da forma
Ai
em que uma funo de agregao {SUM, AVERAGE, MAXIMUM,
MINIMUM, COUNT} e Ai um atributo de R.
A relao resultante da operao de agregao tem apenas os atributos definidos
em ATRIBS mais um atributo por cada item da lista FUNS, cujo nome resulta da
concatenao do nome da funo de agregao com o nome do atributo de R.
33
Operao de Agregao
Obtenha o valor do salrio mximo, do salrio mnimo e da soma do salrio de
todos os empregados.
MAX Salrio, MIN Salrio, SUM Salrio(EMPREGADO)
Obtenha o nmero de empregados por departamento e a respectiva mdia salarial.
NumDep COUNT NumBI, AVERAGE Salrio(EMPREGADO)
NumDep COUNT_NumBI AVERAGE_Salrio
4
5500
2000
1500
34
17
Clculo Relacional
Modelo formal que se baseia na lgica de predicados e que permite manipular
relaes no modelo relacional.
O clculo relacional tem o mesmo poder expressivo da lgebra relacional. Uma
expresso do clculo relacional igualmente uma relao que representa o
resultado de uma consulta base de dados.
As expresses do clculo podem ser especificadas em termos de variveis sobre os
tuplos, clculo relacional por tuplos (ou CRT), ou em termos de variveis sobre
o domnio dos atributos, clculo relacional por domnios (ou CRD).
O clculo relacional uma linguagem no-procedimental. Nas expresses do
clculo no se especifica o modo de obter o resultado mas sim o tipo de
informao que se pretende obter. Isto difere da lgebra relacional onde
necessrio especificar a sequncia de operaes a aplicar para obter o resultado.
A linguagem SQL baseia-se em parte no clculo relacional por tuplos.
35
36
18
37
NumDep = 4(EMPREGADO)
Obtenha o nmero do BI dos empregados que trabalham no departamento 4 e cujo
salrio superior a 2000 euros.
{e.NumBI | EMPREGADO(e) AND e.NumDep = 4 AND e.Salrio > 2000}
Na lgebra relacional seria:
38
19
Quantificadores
Nas frmulas do CRT podemos ainda usar os quantificadores universal e
existencial
( t)(F) ou ( t)(F)
em que e so os quantificadores universal e existencial, t uma varivel que
representa os tuplos de uma relao e F uma frmula.
Uma varivel que representa os tuplos de uma relao diz-se livre se no estiver
quantificada. Por exemplo, na frmula
( t)(t.EmpBI = u.NumBI)
t uma varivel quantificada e u uma varivel livre.
Numa expresso do CRT, as nicas variveis que devem aparecer livres so as que
aparecem esquerda da barra |.
39
Quantificadores
( t)(F) verdadeiro se F for verdadeiro para todos os tuplos t em que t uma
varivel livre de F. Caso contrrio ( t)(F) falso.
( t)(F) verdadeiro se F for verdadeiro para algum tuplo t em que t uma varivel
livre de F. Caso contrrio ( t)(F) falso.
O quantificador universal pode ser transformado no existencial e vice-versa:
( t)(F) NOT ( t)(NOT F)
( t)(F) NOT ( t)(NOT F)
40
20
Quantificadores
Obtenha o nome dos empregados que trabalham no departamento de Produo.
{e.NomeP, e.NomeF | EMPREGADO(e) AND ( d)(DEPARTAMENTO(d)
AND d.Nome = Produo AND d.Num = e.NumDep)}
Para todos os projectos localizados no Porto, obtenha o nome do projecto e o
ltimo nome do respectivo gerente.
{p.Nome, g.NomeF | PROJECTO(p) AND p.Localizao = Porto
AND EMPREGADO(g) AND ( d)(DEPARTAMENTO(d)
AND d.Num = p.NumDep AND d.GerenteBI = g.NumBI)}
Obtenha o nome dos empregados que trabalham em pelo menos um projecto
controlado pelo departamento 4.
{e.NomeP, e.NomeF | EMPREGADO(e) AND ( p)( t)(PROJECTO(p)
AND p.NumDep = 4 AND TRABALHA_EM(t)
AND t.EmpBI = e.NumBI AND p.Num = t.NumProj)}
41
Quantificadores
Obtenha o nmero do BI dos empregados que no tm dependentes.
{e.NumBI | EMPREGADO(e) AND NOT ( d)(DEPENDENTE(d)
AND d.EmpBI = e.NumBI)}
Alternativa de resoluo utilizando a regra de transformao:
{e.NumBI | EMPREGADO(e) AND ( d)(NOT DEPENDENTE(d)
OR d.EmpBI e.NumBI)}
Obtenha o nome dos empregados que trabalham em todos os projectos controlados
pelo departamento 4.
{e.NomeP, e.NomeF | EMPREGADO(e) AND ( p)(NOT PROJECTO(p)
OR p.NumDep 4 OR ( t)(TRABALHA_EM(t)
AND t.EmpBI = e.NumBI AND t.NumProj = p.Num))}
42
21
43
44
22
46
23
A,B(R) I S
CRT
{r.A,r.B | R(r) AND ( s)(S(s) AND r.A = s.A AND r.B = s.B)}
CRD
47
{r | R(r) AND NOT ( s)(S(s) AND r.A = s.A AND r.B = s.B)}
CRD
48
24
A,B,D(R) S
CRT
50
25