Você está na página 1de 12

UERJ

FACULDADE DE ENGENHARIA
DEPARTAMENTO DE ENGENHARIA DE SISTEMAS E COMPUTAÇÃO
ENGENHARIA DE SISTEMAS B

ÁLGEBRA RELACIONAL
Lista de Exercícios

A. Considere as seguintes relações:


R1 (A:Dom1; B:Dom2; C:Dom3)
R2 (D:Dom3; E:Dom4)
R3 (F: Dom4)
R4 (G:Dom3; H:Dom4)
onde A, B, C, D, E, F, G e H representam atributos e Domi representa os domínios de
valores desses atributos. Suponha, ainda, que R1, R2, R3 e R4 possuam 100, 50, 25 e
10 tuplas, respectivamente. Calcule o máximo e o mínimo de tuplas na relação
resultante de cada uma das seguintes expressões da Álgebra Relacional:

1. E1  R1 |X| R2 (equi-join)
C=D

Considerando que:
 a operação de junção é equivalente a uma operação de seleção sobre o produto
cartesiano das tabelas operandas;
 o número de tuplas gerado pelo produto cartesiano é igual ao produto do
número de tuplas das tabelas operandas;
 no caso dos operandos R1 e R2 esse número é igual a 5.000 tuplas
(100 x 50).
Temos que:
 no máximo, a condição (C = D) será válida para todas as 5.000 tuplas do
produto cartesiano;
 no mínimo, nenhuma tupla do produto cartesiano atenderá a condição
(C = D).
Logo, max(E1) = 5.000 e min(E1) = 0
2. E2  E1 |X| R3 (equi-join)
E=F

Da mesma forma, considerando que:


 a relação E1 possui no mínimo zero e no máximo 5.000 tuplas; e
 a relação E3 possui 25 tuplas;
Temos que:
 o produto cartesiano de E1 por R3 terá no máximo 125.000 tuplas
(i.e. 5000*25);
 a condição de seleção (E = F) será válida no máximo para todas essas tuplas e no
mínimo para nenhuma delas.
Logo, max(E2) = 125.000 e min(E2) = 0

3. E3  R3  R4 (união)

Considerando que R3 e R4 possuem 25 e 10 tuplas, respectivamente, temos que:


 o máximo de tuplas de E3 ocorrerá quando R3 e R4 forem disjuntas, isto é, quando
não possuírem tuplas em comum. Neste caso, o número de tuplas da união será
igual à soma do número de tuplas nas duas relações (35);
 o mínimo de tuplas de E3 ocorrerá quando R4 estiver totalmente contida em R3.
Nesse caso, o número de tuplas da união será igual ao número de tuplas de R3
(25).
Logo, max(E3) = 35 e min(E3) = 25
4. E4  E1 ||X| R2 (left-join)
C=D

Considerando que:
 a relação E1 possui no mínimo zero e no máximo 5.000 tuplas;
 a relação R2 possui 50 tuplas;
 o produto cartesiano de E1 por R2 terá no máximo 250.000 tuplas (i.e. 5000*50);
e
 a junção à esquerda inclui todas as tuplas de E1, incluindo aquelas que não
satisfazem a condição de seleção (C = D);
Temos que:
 o máximo de tuplas em E4 será igual 250.000, quando todas as tuplas do produto
cartesiano satisfizerem a condição (C = D);
 o mínimo de tuplas em E4 será igual 5.000, quando nenhuma tupla do produto
cartesiano satisfizer a condição (C = D).
Logo, max(E4) = 250.000 e min(E4) = 5.000

5. E5  E1 |X|| R2 (right-join)
C=D

Considerando que:
 a relação E1 possui no mínimo zero e no máximo 5.000 tuplas;
 a relação R2 possui 50 tuplas;
 o produto cartesiano de E1 por R2 terá no máximo 250.000 tuplas (i.e. 5000*50);
e
 a junção à direita inclui todas as tuplas de R2, incluindo aquelas que não
satisfazem a condição de seleção (C = D);
Temos que:
 o máximo de tuplas em E5 será igual 250.000, quando todas as tuplas do produto
cartesiano satisfizerem a condição (C = D);
 o mínimo de tuplas em E5 será igual 50, quando nenhuma tupla do produto
cartesiano satisfizer a condição (C = D).
Logo, max(E5) = 250.000 e min(E4) = 50
6. E6  R2 ÷ R4 (divisão)

Considerando que R2 e R4 possuem o mesmo número de atributos, esta operação é


inválida, uma vez que a divisão requer que o primeiro operando tenha no mínimo
um atributo a mais do que o segundo operando.

7. E7  R2 ÷ R3 (divisão)

Considerando que a relação R2 possui 50 tuplas e a relação R3 possui 25 tuplas,


temos que:
 o máximo de tuplas em E7 será igual 2, quando todas as tuplas de R2 formarem
um conjunto total de combinações com todas as tuplas de R3. Neste caso, o total
de tuplas de E7 será igual à divisão do número de tuplas de R2 pelo número de
tuplas de R3 (i.e. 50/25).
 o mínimo de tuplas em E7 será igual zero, quando não houver em R2 nenhum
conjunto de tuplas que represente uma combinação total com todas as tuplas de
R3.
Logo, max(E5) = 2 e min(E4) = zero

B. Dadas duas relações R1 e R2, onde R1 contém n1 tuplas, R2 contém n2 tuplas e


n2>n1>0, calcule o máximo e o mínimo de tuplas na relação resultante de cada uma
das seguintes expressões da álgebra relacional:

1. R1  R2

Considerando que:
 R1 e R2 possuem n1 e n2 tuplas, respectivamente; e
 n2 > n1 > 0;
Temos que:
 o máximo de tuplas geradas pela operação de união ocorrerá quando R1 e R2
forem disjuntas, isto é, quando não possuírem tuplas em comum. Nesse caso, o
número de tuplas será igual à soma do número de tuplas nas duas relações (n1 +
n2);
 o mínimo de tuplas geradas pela operação de união ocorrerá quando R1 estiver
totalmente contida em R2. Nesse caso, o número de tuplas será igual ao número
de tuplas de R2 (n2).
Logo, max(R1  R2) = n1 + n2 e min(R1  R2) = n2
2. R1  R2

Da mesma forma:
 o máximo de tuplas geradas pela operação de interseção ocorrerá quando R1
estiver totalmente contida em R2. Nesse caso, o número de tuplas será igual ao
número de tuplas de R1 (n1).
 o mínimo de tuplas geradas pela operação de interseção ocorrerá quando R1 e R2
forem disjuntas, isto é, quando não possuírem tuplas em comum. Nesse caso, o
número de tuplas será igual zero.
Logo, max(R1  R2) = n1 e min(R1  R2) = zero

3. R1 X R2

Como a operação de produto cartesiano combina cada tupla do primeiro operando


com todas as tuplas do segundo operando, sem quaisquer restrições, o número de
tuplas geradas por essa operação é constante e igual ao produto do número de
tuplas em ambos os operandos.
Assim, max(R1 x R2) = min(R1 x R2) = n1 * n2

4. a=7 (R1)
Sabemos que R1 possui 100 tuplas. Se todas elas satisfizerem a condição de seleção
(a = 7) teremos no máximo 100 tuplas no resultado. Se nenhuma delas satisfizer
essa condição, teremo no mínimo zero tuplas.
Assim, max( a=7 (R1)) = 100 e min(( a=7 (R1)) = zero

5. a [R1]

Sabemos que R1 possui 100 tuplas. Se todas elas possuírem o mesmo valor para o
atributo a, teremos apenas uma tupla no resultado da operação de projeção. Por
outro lado, se cada tupla de R1 possuir um valor diferente para o atributo a, teremos
100 tuplas no resultado.

Assim, max (a [R1]) = 100 e min (a [R1]) = 1

C. Escreva uma expressão que traduza a operação de interseção em termos das


operações de união e diferença.

Sabemos que:
 a operação de união inclui as tuplas de ambas as relações operandas sem
duplicação;
 a operação de diferença inclui todas as tuplas do primeiro operando que não estão
presentes no conjunto de tuplas do segundo operando.
Assim sendo, se subtrairmos do resultado da união as tuplas que estão em um
operando mas não estão no outro obteremos as tuplas que estão na sua interseção:
 R  S = (R  S) – (R – S) – (S – R)
D. Seja o seguinte esquema de Banco de Dados Relacional:

LIVRO (Lid, Título, Editora, Assunto)


AUTOR (Aid, Nome)
AUTORIA (Lid, Aid)
EDITORA (Eid, Nome)

onde Lid, Aid e Eid representam os atributos chaves das suas respectivas relações.

Escreva as expressões em Álgebra Relacional que resolvem as seguintes consultas:

1. Nome das editoras que publicaram livros escritos, em parceria, por dois
ou mais autores.

R1  Autoria
R2  Autoria
T R1.Lid [ R1.Aid ≠ R2.Aid ( R1 |X| R2 ) ]
Lid = Lid

S Editora [ T |X| Livro ]


Lid = Lid

2. Nome dos autores que nunca publicaram livros pela editora McGraw-Hill.

Códigos dos livros publicados pela editora McGraw-Hill:


R1  Lid [ Editora = “McGraw-Hill” (Livro) ]
Autores que publicaram livros pela editora McGraw-Hill:
R2  Aid [ R1 |x| Autoria ]
Lid = Lid

Universo de autores:
R3  Aid [Autor]
Códigos dos autores que nunca publicaram livros pela editora McGraw-Hill:
R4  R3 – R2

Nomes desses autores:


S Nome [R4 |X| Autor ]
Aid = Aid
3. Nomes dos autores que só publicaram livros individualmente e sempre
na mesma editora.

Autores que publicaram livros em parceria:


R1  Autoria
R2  Autoria
R3  R1.Aid [ R1.Aid ≠ R2.Aid ( R1 |X| R2 ) ]
Lid = Lid

Autores com mais de uma publicação e seus respectivos livros:


T1  R1.Aid, R1.Lid [ R1.Lid ≠ R2.Lid (R1|X| R2) ]
Aid = Aid

Editoras dos livros publicados por esses autores:


T2  T1.Aid, Livro.Editora [ T1|X| Livro ]
Lid = Lid

Autores com publicações em mais de uma editora:


R4  Aid [ Editora ≠ Editora (T2|X| T2) ]
Aid = Aid

Universo de autores:
R5  Aid [Autor]
Autores que só publicaram livros individualmente:
R6  R5 – R3
Autores que publicaram livros em apenas uma editora:
R7  R5 – R4
Autores que só publicaram livros individualmente e em apenas uma editora:

R8  R6  R7
Nomes desses autores:
S Nome [R8 |X| Autor ]
Aid = Aid
4. Autores que só publicaram livros numa mesma editora.

Autores com mais de uma publicação e seus respectivos livros:


R1  Autoria
R2  Autoria
T1  R1.Aid, R1.Lid [ R1.Lid ≠ R2.Lid (R1|X| R2) ]
Aid = Aid

Editoras dos livros publicados por esses autores:


T2  T1.Aid, Livro.Editora [ T1|X| Livro ]
Lid = Lid

Autores com publicações em mais de uma editora:


R3  Aid [ Editora ≠ Editora (T2|X| T2) ]
Aid = Aid
Universo de autores:
R4  Aid [Autor]
Autores que publicaram livros em apenas uma editora:
R5  R4 – R3
Nomes desses autores:
S Nome [R5 |X| Autor ]
Aid = Aid
5. Autores que publicaram livros sobre todos os assuntos registrados no
banco de dados.

A consulta inclui o pronome indefinido todos e portanto envolve a operação de


divisão. Resta apenas determinar a forma das relações operandas que vão atuar
como dividendo e divisor nessa operação.
Considerando que:
 o número de atributos da relação dividendo deve ser pelo menos uma unidade
maior do que o número de atributos da relação divisora;
 todo os atributos da relação divisora devem corresponder, em termos de domínio,
a um subconjunto não vazio dos atributos da relação dividendo;
 o resultado da operação inclui todos os atributos da relação dividendo que não
têm correspondência na relação divisora;
temos que:
 a relação dividendo deverá incluir, única e exclusivamente, dois atributos: o
primeiro deles com domínio “código de autor” e o segundo com domínio
“assunto”, uma vez que o resultado da operação resume-se aos códigos dos
autores que publicaram livros sobre todos os assuntos;
 a relação divisora deverá possuir apenas um atributo com domínio “assunto”
(i.e., um a menos que a relação dividendo).
Assim;
Dividendo  Autoria.Aid, Livro.Assunto [ Autoria |X| Livro ]
Lid = Lid

Divisor  Assunto [ Livro ]


Autores que publicaram livros em todos os assuntos:
S  Dividendo ÷ Divisor
E. Considere o seguinte esquema de BD:

PACIENTE (Nome, Doença, Tratamento)


MÉDICO (Nome, Especialidade)
Assuma que nomes identificam univocamente tanto pacientes como médicos e que
alguns médicos eventualmente podem tornar-se pacientes. Assuma também que
doenças e especialidades possuem o mesmo domínio, isto é, gripe pode aparecer
como doença e como especialidade. Um médico pode ter mais de uma especialidade.
Um paciente pode ter mais de uma doença e pode receber mais de um tratamento
para a mesma doença.
Expresse as consultas abaixo em expressões da Álgebra Relacional.
 Nomes dos médicos acometidos de uma doença de sua especialidade.

Neste caso, o médico também é paciente e sua doença é da sua especialidade.


Logo:
Médicos que também são pacientes:
R1  Médico |X| Paciente
Nome = Nome

Médicos pacientes cuja doença é a mesma da sua especialidade:

R2  Especialidade = Doença (R1)


Solução:

S Médico.Nome [ R2 ]
 Doenças que possuem um único tratamento.

Universo de doenças:
R1  Doença [ Paciente ]
Universo de doenças com mais de um tratamento:
T1  Paciente
T2  Paciente
R2  T1.Doença [ Tratamento ≠ Tratamento ( T1 |X| T2 ) ]
Doença = Doença

Universo de doenças com um único tratamento:


R5  R1 – R2
 Nomes dos pacientes que estão sendo submetidos a todos os tratamentos
para suas doenças.

F. Seja o seguinte esquema de BD:

PEÇAS (#p, nome, tipo)


CONTÉM (#p, #c)

Onde uma tupla (k, j) de CONTÉM representa o fato de que a peça de código k contém a peça de
código j. Evidentemente, #p e #c possuem o mesmo domínio.

Obtenha expressões da Álgebra Relacional que resolvam as seguintes consultas:

a) Código e nome das peças do tipo parafuso.


b) Código das peças atômicas, isto é, que não possuem componentes.
c) Nome e tipo das peças que possuem um ou mais componentes.
d) Código das peças que não são componentes de nenhuma peça.
e) Códigos das peças que possuem mais de um componente.
f) Código das peças que possuem exatamente um componente.
g) Código das peças compostas que entram na composição de outras peças.
G. Considere as Relações F e D que representam Funcionários e Dependentes, respectivamente,
com o seguinte esquema simplificado:

F(#f, nomef)
D(#f, nomed, par)
onde:
#f: matrícula do funcionário,
nomef: nome do funcionário,
nomed: nome do dependente, e
par: parentesco, que pode ser um dentre: 'filho', 'filha', 'esposa/o', etc.

Observe que em D, #f é uma chave-estrangeira que casa com a chave-primária #f de F.

Abaixo é mostrada uma possível instância dessas relações:

F D
#f nomef #f nomed par
01 F1 01 Alice filha
02 F2 02 Alice esposa
03 F3 02 Clara filha
04 F4 03 José filho

Para as instâncias acima obtenha:

a) F x D
b) F |x| D,
c)  nomef, nomed (F |x| D )
d) σ par='filha'(D)
Obtenha expressões da álgebra relacional que respondem às seguintes consultas:

a) Nomes e parentescos de todos os dependentes?


b) Matrículas dos funcionários que possuem dependentes filhas?
c) Matrículas do funcionários que não possuem dependentes?
d) Matrículas dos funcionários que possuem algum dependente.
e) Nomes dos funcionários que possuem uma dependente chamada Alice.
f) Matrículas dos funcionários que possuem mais de um dependente?
g) Matrículas dos funcionários que possuem exatamente um dependente?
h) Matrículas dos funcionários que não têm Alice como dependente.
i) Matrículas dos funcionários que possuem uma dependente chamada Alice, juntamente com os
nomes de seus demais dependentes, quando for o caso.
j) Matrículas dos funcionários que possuem exatamente um dependente.

Você também pode gostar